主题:一个问题
刚才看了gxd的问题,我做了一下,却出现无效标示符,请各位帮帮忙,先谢谢大家。
洗牌问题
Problem
给你2N张牌,编号为1,2,3..n,n+1,..2n。这也是最初的牌的顺序。
一次洗牌是把序列变为n+1,1,n+2,2,n+3,3,n+4,4..2n,n。可以证明,
对于任意自然数N,都可以在经过M次洗牌后第一次重新得到初始的顺序。编程对于小于10000的自然数N,求出M的值。
Input
每行一个整数N。
Output
输出与之对应的M。
Sample Input
20
1
Sample Output
20
2
program jyc (input,output);
const n=20;
var
t:integer;
a:array[1..2*n] of integer;
b:array[1..2*n] of integer;
procedure change (var a:integer);
var
j,k:integer;
begin
for j:=1 to n do
a[j*2-1]:=b[j];
for k:=n+1 to 2*n do
a[k-n]:=b[k];
end;
begin
repeat
change;
t:=t+1;
until (a=b);
write('the number is:');
writeln(t);
end.
洗牌问题
Problem
给你2N张牌,编号为1,2,3..n,n+1,..2n。这也是最初的牌的顺序。
一次洗牌是把序列变为n+1,1,n+2,2,n+3,3,n+4,4..2n,n。可以证明,
对于任意自然数N,都可以在经过M次洗牌后第一次重新得到初始的顺序。编程对于小于10000的自然数N,求出M的值。
Input
每行一个整数N。
Output
输出与之对应的M。
Sample Input
20
1
Sample Output
20
2
program jyc (input,output);
const n=20;
var
t:integer;
a:array[1..2*n] of integer;
b:array[1..2*n] of integer;
procedure change (var a:integer);
var
j,k:integer;
begin
for j:=1 to n do
a[j*2-1]:=b[j];
for k:=n+1 to 2*n do
a[k-n]:=b[k];
end;
begin
repeat
change;
t:=t+1;
until (a=b);
write('the number is:');
writeln(t);
end.