UVA 350

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=286

本题类似于做一个随机数产生器,利用l=(z*l+i)%m产生出l,然后保留l,直到l再次出现,循环中要特别注意But be careful:the cycle might not begin with the seed!,就是第一个l不保存

View Code
 1 #include<stdio.h>
 2 int j,len;
 3 long long ans[100000];
 4 int ran(int l)
 5 {
 6  int i;
 7  for(i=0;i<j;i++)
 8    if(l==ans[i])
 9      {
10       return 0;
11       break;
12      }
13    return 1;
14 }//判断l是否已经出现过
15 int main()
16 {
17  long long l,i,z,m;
18  int ca=1;
19  while(scanf("%lld%lld%lld%lld",&z,&i,&m,&l),z||i||m||l)
20       {
21        j=0;
22        l=(z*l+i)%m;//这里是因为But be careful:the cycle might not begin with the seed!
23        while(ran(l))
24           {
25            ans[j]=l;
26            j++;
27            l=(z*l+i)%m;
28           }
29        printf("Case %d: %d\n",ca++,j);//ca用于case计数
30       }
31  return 0;
32 }

 

posted @ 2013-02-18 14:46  执着追求的IT小小鸟  阅读(107)  评论(0编辑  收藏  举报