题目名称:澳门风云(四)
题目描述:已知:
现有一副扑克有2n张,编号为1,2,…,n,n+1,…,2n,每次洗牌之后扑克次序变为:n+1,1,n+2,2,n+3,3,…,2n,n,现已知n与洗牌次数a,你能说出a次洗牌过程扑克牌的顺序与开始时相同的次数吗?
输入描述:一个整数表示牌数量的一半,一个整数a表示洗牌的次数。
输出描述:一个整数。
样例输入:
4 12
样例输出:
2
说明:(0<n<100,0<m<100)
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int k,n,m,y,p[10000]={},b[10000]={},s=0;
cin>>n;
for(k=1; k<=2*n; k++) {
p[k]=k;
}
for(m=1; m<=20000; m++) {
y=0;
for(k=1; k<=n; k++) {
b[2*k]=p[k];
b[2*k-1]=p[n+k];
}
for(k=1; k<=2*n; k++)
p[k]=b[k];
for(k=1; k<=2*n; k++) {
if(p[k]!=k) {
y=1;
break;
}
}
if(y==0) {
break;
}
}
if(p[k]=b[k]){
s++;
}
cout<<s;
return 0;
}