主题:求猴子选大王程序
wangminrui0804
[专家分:30] 发布于 2009-12-17 19:46:00
已知有N只猴子选大王,报道第Y个的时候那个出列,接着往后报,第Y个出列……以此类推,最后一个为猴子中间的大王,求这个大王的编号!
注意:请不要用指针做,用数组或字符串或循环来做。
还有,顺便教我一下高精度除法的思想,谢谢大家了~
回复列表 (共4个回复)
沙发
wangminrui0804 [专家分:30] 发布于 2009-12-17 19:53:00
补充一句啊,明天我要签收,好的分数给的多多的哦~
板凳
818721 [专家分:10] 发布于 2009-12-17 20:26:00
给你填空
约瑟夫问题:设有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 楼
abcwuhang [专家分:1840] 发布于 2009-12-19 10:24:00
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 楼
huxuming [专家分:20] 发布于 2009-12-19 10:56:00
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.
我来回复