caiweiwenjs 2009-11-11 02:23:00
点我顶贴
收藏
删除
如题!
我的递归:
k一开始是2
procedure work(k:longint);
begin
if k=1 then exit
else
begin
inc(ans);
if k<=n then
work(2*k)
else
work(2*(k-n)-1);
end;
end;
#2 hades@2009-07-08 02:44:00
12224
回复
删除
最好别递归……
此题可以证明,只需保证有一张牌回到初始位置,整个序列就是初始的位置,因此只需求出第N张牌经过多少次就行了,至于N的值,依个人口味酌情选择。
var
n,pos:longint;
m:longint;
begin
readln(n);
m:=1;
pos:=2;
while pos<>1 do begin
if pos<=n then pos:=pos*2 else pos:=(pos-n)*2-1;
m:=m+1;
end;
writeln(m);
end.
这是我的程序。