回 帖 发 新 帖 刷新版面

主题:一个问题

刚才看了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.

回复列表 (共4个回复)

沙发

1、数组定义出错
2、a,b的范围太大
3、change用法出错!!!
[img]http://sports.sohu.com/upload/wallpapers/shaq_yao1024x768.jpg[/img]

板凳

我想问楼上的:
1、数组怎样开错了?
2、a、b开得不算大啊,为什么你说a、b的范围太大呢?

3 楼

就是j,k定义出错!!!

[img]http://sports.sohu.com/upload/wallpapers/shaq_yao1024x768.jpg[/img]

4 楼

哦,漏了考虑0这种情况了……

我来回复

您尚未登录,请登录后再回复。点此登录或注册