猴子选大王
pascal吧
全部回复
仅看楼主
level 2
中山杏红 楼主
有N只猴子选大王,选举的办法是:排成一排,从头到尾报数,报到3的倍数(3、6、9、……)的退出去,直到全部报完,然后从尾到头开始逆向报数,同样报3的倍数的退出。第三遍又是从头到尾进行,第四遍又从尾到头,直到最后余下两只,以排在后面(按报数的顺序)的那只为猴王。请编程序找出猴王的位置。(N从键盘输入)
2017年05月30日 12点05分 1
level 1
type
point=^node;
node=record
data:integer;
next:point;
end;
var
head,p1,p2:point;
i,n,k:integer;
begin
readln(n,k);
new(p1);
p1^.data:=1;
head:=p1;
for i:=2 to n do
begin
new(p2);
p2^.data:=i;
p1^.next:=p2;
p1:=p2;
end;
p2^.next:=head;
i:=1;
p1:=head;
repeat
p2:=p1^.next;
i:=i+1;
if i mod k= 0
then begin
p1^.next:=p2^.next;
p2^.next:=nil;
dispose(p2);
end
else p1:=p2
until p2^.next=p2;
writeln(p2^.data);
end.
用链表做,试试看理解程序,还有不明白的可以再问。
2017年06月24日 02点06分 2
错的
2017年08月07日 04点08分
1