本文主要是介绍1128 洗牌问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
给你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;
}
这篇关于1128 洗牌问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!