UVa 350 - Pseudo-Random Numbers

本文详细介绍了如何通过数组判断伪随机数序列中某一数字是否重复出现,以及如何观察循环的开头是第一个数还是第二个数。通过实例代码解释了UVa350题目解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传送门UVa 350 - Pseudo-Random Numbers

参考了一下别人的方法, 利用数组判断某一数字是否重复出现. 那个观察出循环的开头不是第一个数就是第二个数我实在是观察不出来啊....


#include <cstdio>
#include <cstring>

using namespace std;

int num[100000] = {0};

int main()
{
    //freopen("input.txt", "r", stdin);
    int z, i, m, l, cnt, count = 1;
    while (scanf("%d%d%d%d", &z, &i, &m, &l))
    {
        if (z == 0 && i == 0 && m == 0 && l == 0)
            break;
        cnt = 0;
        z %= m;
        i %= m;
        l = (z * l + i) % m;
        while (!num[l])
        {
            num[l] = 1;
            l = (z * l + i) % m;
            cnt++;
        }
        printf("Case %d: %d\n", count++, cnt);
        memset(num, 0, sizeof(num));
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值