/*
题意;给定step和MOD 计算seed数组
且seed由公式 seed[i]=(seed[i-1]+step)%MOD 决定
若 seed数组里的所有数值在【0,MOD-1】内
输出 good choice
否则 输出 bad choice
要点:1.储存seed数组出来的值时候转换成对应a【】的下标,比较巧妙
2.一定记得数组的初始化
*/
#include <stdio.h>
int main() {
int step,MOD;
int flag=0;
int seed[100000];//注意范围是10W
int a[100000];
while(scanf("%d",&step)!=EOF&&scanf("%d",&MOD)!=EOF) {
int i;
//数组的初始化一定要有,否则会WA 因为假若后面求seed数组时,没有某一个数,那么那个地方会为空,可能出错
for(i = 0; i<=MOD - 1 ; i ++) {
seed[i] = 0;
a[i] = 0;
}
for( i=1; i<=MOD-1; i++) {
seed[i]=(seed[i-1]+step)%MOD;
a[seed[i]]=seed[i];//对应的数值将会被存放在对应下标
}
for( i=1; i<=MOD-1; i++) {
if(i!=a[i]) //当在【0,MOD-1】范围内 有下标不等于对应值的时候(即缺少那个数) 就会使得flag=1
flag=1;
}
if(flag==0)//在【0,MOD-1】范围内所有数值都有在数组对应的时候,就可以得到good
printf("%10d%10d Good Choice\n\n",step,MOD);//注意此处10d的用法 表示空出10个空格
else
printf("%10d%10d Bad Choice\n\n",step,MOD);
}
return 0;
}
1014 Uniform Generator
最新推荐文章于 2020-03-14 12:37:43 发布