主题:如何解决猴子称大王问T
QQ331373582
[专家分:1500] 发布于 2005-05-26 20:01:00
有N只猴子选大王,选举的办法:排成一排,从头到尾报数,报道3的倍数(3,6,9...)的退出,知道全报完,然后又从头开始,同样3的倍数退出。第3遍又是从头到尾进行,第4次又从头到尾,最剩下2只,以排在后面(按报数的顺序)的那只为大王。编程找出猴王的位置(N从键盘输入)[em7][em7]
回复列表 (共29个回复)
21 楼
lyn532226 [专家分:230] 发布于 2005-06-17 15:13:00
不是呀,1和2是永远也不会出的呀!!因为他们永远也不会排在第三的位置。
22 楼
QQ331373582 [专家分:1500] 发布于 2005-06-18 09:07:00
我假设有4个数的话
N=4.
那么这个数组是1..4
首先是排除了3
然后下一步就是4了
那么应该怎样写出这个过程呢?
23 楼
Tux [专家分:80] 发布于 2005-08-05 15:01:00
var a,n,j,j1,j2,j3,l,m,o,f,o1:longint;
s,s2:string;
begin
readln(n);
s:='';
for a:=1 to n do s:=s+'1';
repeat
l:=0;
for j:=1 to length(s) do begin
if s[j]='1' then l:=l+1;
if l mod 3=0 then s[j]:='0';
end;
m:=0;
for j1:=length(s) downto 1 do begin
if s[j1]='1' then m:=m+1;
if m mod 3=0 then s[j1]:='0';
end;
f:=0;
for o:=1 to length(s) do if s[o]='1' then f:=f+1;
until f=2;
for o1:=length(s) downto 2 do if s[o1]='1' then writeln(o1);
readln;
end.
24 楼
Tux [专家分:80] 发布于 2005-08-05 15:01:00
var a,n,j,j1,j2,j3,l,m,o,f,o1:longint;
s,s2:string;
begin
readln(n);
s:='';
for a:=1 to n do s:=s+'1';
repeat
l:=0;
for j:=1 to length(s) do begin
if s[j]='1' then l:=l+1;
if l mod 3=0 then s[j]:='0';
end;
m:=0;
for j1:=length(s) downto 1 do begin
if s[j1]='1' then m:=m+1;
if m mod 3=0 then s[j1]:='0';
end;
f:=0;
for o:=1 to length(s) do if s[o]='1' then f:=f+1;
until f=2;
for o1:=length(s) downto 2 do if s[o1]='1' then writeln(o1);
readln;
end.
25 楼
MagicG [专家分:650] 发布于 2005-08-05 16:47:00
三个月了```加分`````无语`````
26 楼
闪电123 [专家分:470] 发布于 2005-08-05 19:33:00
循环链表(有小错思路是对的):
type
point=^node;
node=record
data:integer;
next:point
end;
var
m,n,s,i:integer;
p,q,head:point;
begin
write('input the n,m=');readln(n,m);
new(head);q:=head;head^.data:=1;
for i:=2 to n do
begin
new(p);p^.data:=s;q^.next:=p;q:=p;
end;
q^.next:=head;
s:=1;q:=head;
repeat
p:=q^.next; s:=s+1;
if (s mod m)=0
then begin
q^.next:=p^.next;
p^.next:=NIL;
end
else q:=p;
until p^.next=p;
writeln('the king is No ',p^.data);
end.
27 楼
yukangcool [专家分:460] 发布于 2005-08-06 09:26:00
[em9]这明显是一道糊小孩的题啊!这很可能是那第二只猴子出的题![em19]
28 楼
绿步甲 [专家分:1610] 发布于 2005-08-07 15:52:00
我有个简单的:var
i,m,k,j:integer;a:array [1..100]of 0..1;ok:boolean;
begin
read(m);for i:=1 to m do
a[i]:=1;k:=0;
repeat ok:=false;
for i:=1 to m do
if a[i]=1
then
begin
k:=k+1;j:=i;
if k mod 3=0
then
begin
a[i]:=0;
ok:=true;k:=0;
end
end;
until not(ok);
write (j)
end.
给分呀!
29 楼
mo19880630 [专家分:420] 发布于 2005-08-11 07:51:00
类似于约瑟夫问题!!用递归做!
我来回复