有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
例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
哦,挺有意思的!