小记:题目有点长,不过都是解释题意的。 懒得看,直接看数字,大概理解题意,然后在输出问题上注意点即可,。
思路:采用标记数组,生成一个数标记一个数,用两个变量记住公式里的前后两个数即可,循环标记。直到遇到一个已经标记了的数退出循环。
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int MAX_ = 100010; bool vis[MAX_]; int main(){ int n, m; while(cin>>n>>m){ memset(vis,0,sizeof(vis)); int pre = 0, cur = 0; while(!vis[cur]){ vis[cur] = 1; cur = (pre + n)%m; pre = cur; } bool flag = 0; for(int i = 0; i < m; ++i){ if(!vis[i]){ flag = 1;break; } } if(!flag){ printf("%10d%10d Good Choice\n\n",n,m); } else { printf("%10d%10d Bad Choice\n\n",n,m); } } return 0; }