HDU 1014 Uniform Generator 模拟题

解题报告:

题目大意:有一个可以产生从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 }
View Code
原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3100411.html