回 帖 发 新 帖 刷新版面

主题:如何解决猴子称大王问T

有N只猴子选大王,选举的办法:排成一排,从头到尾报数,报道3的倍数(3,6,9...)的退出,知道全报完,然后又从头开始,同样3的倍数退出。第3遍又是从头到尾进行,第4次又从头到尾,最剩下2只,以排在后面(按报数的顺序)的那只为大王。编程找出猴王的位置(N从键盘输入)[em7][em7]

回复列表 (共29个回复)

21 楼

不是呀,1和2是永远也不会出的呀!!因为他们永远也不会排在第三的位置。

22 楼

我假设有4个数的话
N=4.
那么这个数组是1..4
首先是排除了3
然后下一步就是4了
那么应该怎样写出这个过程呢?

23 楼

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 楼

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 楼

三个月了```加分`````无语`````

26 楼

循环链表(有小错思路是对的):
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 楼

[em9]这明显是一道糊小孩的题啊!这很可能是那第二只猴子出的题![em19]

28 楼

我有个简单的: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 楼

类似于约瑟夫问题!!用递归做!

我来回复

您尚未登录,请登录后再回复。点此登录或注册