1128: 洗牌问题
时间限制: 1 Sec 内存限制: 32 MB提交: 21 解决: 11
[ 提交][ 状态][ 讨论版]
题目描述
给你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,i,j,k;
scanf("%d",&n);
k=n+1;
if(n==1)
printf("2\n");
else{
for(i=1;;i++)
{
if(k>n)
k=2*(k-n)-1;
else
k=k*2;
if(k==n+1)
break;
}
printf("%d\n",i);
}
return 0;
}