问题描述: 有n张牌,记为1,2,3……,n(n<1000)

应当怎样排放,才能使打开第一张是“1”,然后把两张依次放置末尾;打开上面一张刚好是“2”,再依次把3 张放到末尾;再打开上一张,刚好是“3”;如此反复下去,直到打开最后一张是 n 。(请用 pascal 解题,具体程序:请回答)
2026年09月25日 08:19
有3个网友回答
网友(1):

有N张牌,记为1,2,...,N,应当怎样排放,才能使:打开第一张是1,然后报两张依次放在末尾;打开上面一张,刚好是2,再依次打开上面一张,刚好是3;如此继续下去,直至打开最后一张是N。写一个程序解决这个问题。 解:Pascal程序: Program lt7_2_1; uses crt; var a,b:array[1..1000] of integer; i,j,t,h,n:integer; begin clrscr; write('N=');readln(n); for i:=1 to n do a[i]:=i; a[1]:=1;h:=2;t:=n;b[1]:=1; for i:=2 to n do begin for j:=1 to i do begin inc(t);a[t]:=a[h];inc(h); end; b[a[h]]:=i;inc(h); end; for i:=1 to n do write(b[i]:5); end

网友(2):

例1、有N张牌,记为1,2,...,N,应当怎样排放,才能使:打开第一张是1,然后报两张依次放在末尾;打开上面一张,刚好是2,再依次打开上面一张,刚好是3;如此继续下去,直至打开最后一张是N。写一个程序解决这个问题。 解:Pascal程序: Program lt7_2_1; uses crt; var a,b:array[1..1000] of integer; i,j,t,h,n:integer; begin clrscr; write('N=');readln(n); for i:=1 to n do a[i]:=i; a[1]:=1;h:=2;t:=n;b[1]:=1; for i:=2 to n do begin for j:=1 to i do begin inc(t);a[t]:=a[h];inc(h); end; b[a[h]]:=i;inc(h); end; for i:=1 to n do write(b[i]:5); end

网友(3):

哦,挺有意思的!