我的递归:
k一开始是2
procedure work(k:longint);
begin
if k=1 then exit
else
inc(ans);
if k<=n then
work(2*k)
work(2*(k-n)-1);
end;
此题可以证明,只需保证有一张牌回到初始位置,整个序列就是初始的位置,因此只需求出第N张牌经过多少次就行了,至于N的值,依个人口味酌情选择。
var
n,pos:longint;
m:longint;
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;
writeln(m);
end.
这是我的程序。
(2)递推总是好些的,这么大的数据本来递归就容易栈溢出
但是数据大了点这肯定会栈溢出
测试结果10:标准输出7位!
这都不栈溢出才怪
快速帮助 | 运行状态 | 反馈举报 | 关于我们 | 免责声明 | 浙ICP备11060257号 Processed in 0.0040 Second(s) Copyright (C) RQNOJ 2007-2019. All Rights Reserved.