题目描述
给你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的值。
输入
一个自然数N
输出
洗牌次数M
样例输入
20
样例输出
20
#include<stdio.h>
int main()
{
int N,n,i,j,M=0;
int a[20000],b[20000];
scanf("%d",&N);
n=2*N;
for(i=0;i<n;i++)
a[i]=i+1;
b[0]=0;
while(b[0]!=1)
{
for(i=0,j=N;i<n;i=i+2,j++)
b[i]=a[j];
for(i=1,j=0;i<n;i=i+2,j++)
b[i]=a[j];
M++;
for(i=0;i<n;i++)
a[i]=b[i];
}
printf("%d\n",M);
return 0;
}