首页 > 其他 > 详细

UVa 350 伪随机数

时间:2014-02-19 22:42:21      阅读:356      评论:0      收藏:0      [点我收藏+]

/*

* 解题思路:

* 题意不难理解,就是利用所给公式求出最多可产生不同的随机数个数

*      最开始的思路是像题目中例子那样,如果产生一个数跟第一个种子相同的话则跳出循环

*      写完代码后发现第三个Sample进入死循环,则发现最终的那个数有时候不是跟第一个种子相同,

*      而是跟任意一个已产生的种子数相同就判跳出循环

*/

#include <stdio.h>
#include <string.h>
int vis[ 10000 ];
int main( )
{
    int Z,I,M,L;
    int total = 1,sum,tmp;
    while( scanf("%d%d%d%d",&Z,&I,&M,&L) && ( Z||I||M||L ) )
    {
        sum = 0;
        memset( vis,0,sizeof( vis ) );
        while( 1 )
        {
            tmp = (Z*L+I) % M;
            if( vis[ tmp ] != 0 ) break;
            sum++;
            vis[ tmp  ]++;
            L = tmp;
        }
        printf("Case %d: %d\n",total++,sum);
    }
    return 0;
}


UVa 350 伪随机数

原文:http://blog.csdn.net/u011886588/article/details/19485227

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!