主题:谁能帮我设计出来这个程序?
haoyu116648
[专家分:0] 发布于 2011-05-01 13:06:00
我是个高中生,老师叫我们完成的作业,不过我做了好久还是没有做好,希望您能抽出一点时间帮我一下。
我们目前学完了数组,衷心希望您能用数组及数组之前算法;
另外希望旁边您能注释一下(我水平有限啊,呵呵);
正题:
有一群猴子选共N只,要选大王,他们约定成一排,从头到尾1至3报数,报到3的猴子留下,其余退出,留下的猴子再从尾至头1至3报数,再留下3的猴子,重新1至3报数...如此进行直到剩下的一只猴子,若剩下两只猴子,已原来战队时排在后面的那只猴子为王。编程,输出最初站在何处的猴子为王。
非常感谢!
回复列表 (共6个回复)
沙发
真的想学软件 [专家分:0] 发布于 2011-07-07 23:45:00
好深奥啊…这么难学!!!!!!
板凳
真的想学软件 [专家分:0] 发布于 2011-07-07 23:48:00
好深奥啊…这么难学!!!!!!
3 楼
abcwuhang [专家分:1840] 发布于 2011-07-08 12:30:00
program monkey;
var n,a0:longint;
a:array [1..1000000] of boolean;
procedure init;
var i:longint;
begin
readln(n);
fillchar(a,sizeof(a),false);
for i:=1 to n do
a[i]:=true;
end;
procedure main;
var flag,p,i:longint;
begin
a0:=n;
while a0>2 do
begin
flag:=0;
p:=0;
for i:=1 to a0 do
begin
if a[i] then
begin
flag:=flag+1;
p:=p+1;
end;
if flag mod 3=0 then
begin
a[i]:=false;
flag:=0;
end;
end;
a0:=p;
end;
for i:=n downto 1 do
if a[i] then
begin
writeln(i);
exit;
end;
end;
begin
init;
main;
end.
直接打的。。没编译,,
4 楼
幽灵密码 [专家分:3510] 发布于 2011-07-23 14:39:00
如果你的N小于等于255的话可以采用以下方法
var n,c,j,i,s:integer;
a:set of 1..255;
begin
readln(n);
a:=[1..n];
s:=n;
repeat
c:=c+1;
if c=2 then c:=0;
j:=0;
if c=1 then
for i:=1 to n do begin
if i in a then begin
j:=j+1;
if (j mod 3)<>0 then begin a:=a-[i];s:=s-1 end
end
end
else
for i:=n downto 1 do begin
if i in a then begin
j:=j+1;
if (j mod 3)<>0 then begin a:=a-[i];s:=s-1 end
end
end;
until s<3;
for i:=1 to n do if i in a then begin
write(i);
readln;
halt
end
end.
5 楼
幽灵密码 [专家分:3510] 发布于 2011-07-23 14:44:00
如果N比较大的话就用数组
var n,c,j,i,s:integer;
a:array[1..5000]of boolean;
begin
readln(n);
fillchar(a,sizeof(a),true);
s:=n;
repeat
c:=c+1;
if c=2 then c:=0;
j:=0;
if c=1 then
for i:=1 to n do begin
if a[i] then begin
j:=j+1;
if (j mod 3)<>0 then begin a[i]:=false;s:=s-1 end
end
end
else
for i:=n downto 1 do begin
if a[i] then begin
j:=j+1;
if (j mod 3)<>0 then begin a[i]:=false;s:=s-1 end
end
end;
until s<3;
for i:=1 to n do if a[i] then begin
write(i);
readln;
halt
end
end.
6 楼
幽灵密码 [专家分:3510] 发布于 2011-07-23 14:48:00
注意在if c=1里的两个for循环,其实都是没有必要用begin和end,但是这个不得不要,原因就是假如没有的话系统会默认把 if c=1的else 看成是 if i in a(if a[i])里的else,程序就会出错,第二个for循环的可要可不要
我来回复