学生的个数可以用推理初步算出,因为每次数过后的剩余数的个数约为原个数的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.