一道pascal编程题,求大师解答!实在不知道怎么做,有公式吗?

2025-04-27 19:27:20
推荐回答(1个)
回答1:


学生的个数可以用推理初步算出,因为每次数过后的剩余数的个数约为原个数的1/3,能除到数字接近1时的次数就约为学生数。

程序如下:

var
  n:integer;
  a:array[1..10000] of integer;
  b:array[1..10000] of boolean;
  i,j,k,m,x:integer;
  {m-学生数,
  k-每轮数数前的数的个数,
  j-每轮数数后剩余的数的个数}
begin
    readln(n);
    for i:=1 to n do begin a[i]:=i; b[i]:=true; end;
    m:=0;
    repeat
          inc(m);
          k:=0;
          for i:=1 to n do begin
              if b[i] then inc(k);
              if (b[i])and((k+1)mod 3<>0) then b[i]:=false;
          end;
          j:=0;
          for i:=1 to n do if b[i] then begin inc(j); x:=i; end;
    until j=1;
    writeln(m+1:6,a[x]:6);
    readln;
end.