pascal N只猴子选大王 恩 程序尽量简单.初学者水平N只猴子选大王.选举办法如下:从头到尾1、2、3报数,凡报3的退出,余下的从尾到头1、2、3报数,凡报3退出;余下的又从头到尾报数,还是报3的

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/20 10:11:57

pascal N只猴子选大王 恩 程序尽量简单.初学者水平N只猴子选大王.选举办法如下:从头到尾1、2、3报数,凡报3的退出,余下的从尾到头1、2、3报数,凡报3退出;余下的又从头到尾报数,还是报3的
pascal N只猴子选大王 恩 程序尽量简单.初学者水平
N只猴子选大王.选举办法如下:从头到尾1、2、3报数,凡报3的退出,余下的从尾到头1、2、3报数,凡报3退出;余下的又从头到尾报数,还是报3的退出;依此类推,当剩下的两只猴子时,取这时报数报1的为王.若想当猴王,请问当初应占据什么位置?
例如:输入猴子最初的只数N:10
输出想当猴王当初应占据的位置:8

pascal N只猴子选大王 恩 程序尽量简单.初学者水平N只猴子选大王.选举办法如下:从头到尾1、2、3报数,凡报3的退出,余下的从尾到头1、2、3报数,凡报3退出;余下的又从头到尾报数,还是报3的
var
q:array[1..1000] of integer;// 循环队列
b,e,c:integer;
n:integer;
i:integer;
procedure add(x:integer);
begin
inc(e);
if e >= 1000 then e:=1;
q[e]:=x;
inc(e);
end;
function del():integer;
begin
inc(b);
if b >= 1000 then b:=1;
del:=q[b];
dec(c);
end;
begin
readln(n);
for i:= 1 to n do
add(i);
while c > 2 do
begin
add(del); // 报 1
add(del); // 报 2
del; // 报 3 的退出
end;
// 此时只剩两只猴子
writeln(del);
end.