回 帖 发 新 帖 刷新版面

主题:求猴子选大王程序

已知有N只猴子选大王,报道第Y个的时候那个出列,接着往后报,第Y个出列……以此类推,最后一个为猴子中间的大王,求这个大王的编号!
注意:请不要用指针做,用数组或字符串或循环来做。
还有,顺便教我一下高精度除法的思想,谢谢大家了~

回复列表 (共4个回复)

沙发

补充一句啊,明天我要签收,好的分数给的多多的哦~

板凳

给你填空
约瑟夫问题:设有n个人编号分别为1~n,围坐在一个圆桌周围。现从第一个人开始报数,数到第m个人出列,然后从出列的下一个人重新开始报数,数到第m个人又出列,…,如此重复,直到所有人都出列为止。输入n和m,求出出列的顺序表。例如当n=8,m=5时,出列的顺序表是:5 2 8 7 1 4 6 3。
提示:程序中i表示人的编号,j表示已出列的人数,s表示当前所报的数字,布尔数组a[i]用来标记第i个人有没有出列。
var 
  a:array[1..10] of boolean;
  i,j,s,n,m:integer;
begin
  readln(n,m);
  for i:=1 to n do a[i]:=true;
  i:=0; j:=0; s:=0;
  repeat
    i:=i+1;
    if i>n then(     );
    if a[i] then begin
      (        );
       if s=m then begin
          (          );
           write(i:4);
          (          );
           j:=j+1;
       end;
    end;
  until(      );
end.

3 楼

var
  a:array[1..10000] of integer;
  n,s,i,j:integer;
  begin
  read(m,n);
  for i:=1 to m do a[i]:=1;
  j:=0;
  for i:=1 to m do
  begin
  s:=0;
  while s<n do
  begin
  if j<m then inc(j)
  else j:=1;
  s:=s+a[j];
  end;
  write(j);
  a[j]:=0;
  end;
  end.

4 楼

program taozi;
  var
    a:array[1..10000] of integer;
    i,j,m,n:longint;
  begin
    readln(n);
    a[1]:=1;m:=1;
    for i:=2 to n do
      begin
        inc(a[1]);
        for j:=1 to m do a[j]:=a[j]*2;
        for j:=1 to m-1 do
          begin
            a[j+1]:=a[j+1]+a[j] div 10;
            a[j]:=a[j] mod 10;
          end;
        if a[m]>9 then
                    begin
                      inc(m);
                      a[m]:=a[m-1] div 10;
                      a[m-1]:=a[m-1] mod 10;
                    end;
      end;
    for i:=m downto 1 do write(a[i]);
  end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册