注解
1、开一个标记数组,hash的思想,记得用memset初始化为0
2、循环生成,当某个数第二次生成的时候,意味着已经形成周期了,就可以break了。
3、此时遍历一遍标记数组,如果有数字还没生成,就是Bad Choice,否则就是Good Choice
代码
#include <iostream>
#include <cstring>
using namespace std;
int main(){
int STEP, MOD;
while(cin>>STEP>>MOD){
int visit[MOD];
memset(visit, 0, sizeof(visit));
int now = 0;
while(true){
now = (now+STEP)%MOD;
visit[now]++;
if(visit[now]==2){
break;
}
}
int isGood = 1;
for(int i=0; i<MOD; i++){
if(!visit[i]){
isGood = 0;
break;
}
}
if(isGood){
printf("%10d%10d Good Choice\n\n", STEP, MOD);
}
else{
printf("%10d%10d Bad Choice\n\n", STEP, MOD);
}
}
return 0;
}