解题报告:
题目大意:有一个可以产生从0到mod-1的范围的随机数的公式是seed(x+1) = [seed(x) + STEP] % MOD,seed(1)=0,利用这个公式产生的随机数可能有mod-1个不同的,也可能少于这么多,给定一个STEP和一个MOD,若对于这一对你数,可以产生mod-1个不同的随机数,则称这个是一个Good Choice否则为Bad Chioce,还有就是注意一下输出的格式。
模拟题,定义一个数组,标记产生的这个随机数是不是已经产生过了,若这个随机数是已经产生过的,那么接下来就会进入一个周期,这样的话随机数就达不到mod-1个了。
1 #include<cstdio> 2 #include<cstring> 3 int visit[100005]; 4 int main() { 5 int step,mod,front; 6 while(scanf("%d%d",&step,&mod)!=EOF) { 7 memset(visit,0,sizeof(visit)); 8 visit[0]=1; 9 front=0; 10 int i; 11 for(i=1;i<mod;++i) { 12 front=(front+step)%mod; 13 if(visit[front]) 14 break; 15 visit[front]=1; 16 } 17 if(i==mod) 18 printf("%10d%10d Good Choice\n\n",step,mod); 19 else 20 printf("%10d%10d Bad Choice\n\n",step,mod); 21 } 22 return 0; 23 }