數壹張牌,翻過來恰好是A,放在桌面上,第二次數兩張牌,數1的那張放在手中牌
的下面,數2的那張牌翻過來恰好是2,也放在桌面上,再數三張牌,順次把數1、2
的牌放在手中牌的下面,第三張牌翻過來恰好是3,仍然放在桌面上。這樣繼續做下
去,直到手中的13張牌全部翻完為止,此時桌面上的牌的順序恰好是:A,2,3,4
,5,……,J,Q,K。請編程序找出魔術師手中的那13張牌的原始順序。
[分析]可看作每次翻第i張牌前,先移動i-1張牌到牌底,再翻壹張即為牌號i。
var i,j,k,t,n:integer;
a:array[1..50] of integer;
begin
write('N='); readln(n);
a[n]:=1;
for i:=n-1 downto 1 do
begin
a[i]:=1;
for j:=i+1 to n do inc(a[j]);
for j:=1 to i-1 do
begin
t:=a[n];
move(a[i],a[i+1],(n-i)*sizeof(a[1]));
a[i]:=t;
end;
end;
for i:=1 to n do write(a[i],' ');
writeln;
end.