HDOJ 1014 Uniform Generator

【题意】计算机模拟都需要随机数。一个产生伪随机数的方法是通过一个  seed(x+1) = [seed(x) + STEP] % MOD  这样形式的方法。如果不用STEP的话,将产生很有规律的随机数从0-mod-1,这样不好。如果加上STEP,例如 STEP = 3 and MOD = 5,则产生0, 3, 1, 4, 2,称为uniform distribution(均匀分布)。如果是STEP = 15 and MOD = 20,则产生 0, 15, 10, 5。任务就是判断给出的step和mod是否可以产生均匀分布的伪随机数。

注意:c++输出宽度的设置,通过setw()。


【代码:AC】

#include <iostream>
#include <iomanip>
#include <cstring>
#include <cstdio>
using namespace std;

#define MAX 100000+10
int main()
{
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    int num[MAX];
    int STEP = 0, MOD = 0;
    while (cin >> STEP >> MOD)
    {
        int i = 0, pos = 0;
        memset(num, 0, sizeof(num));
        for (i = 0; i < MOD; i++)
        {
            num[pos] = 1;
            pos += STEP;
            pos %= MOD;
        }

        int flag = 1;
        for (i = 0; i < MOD; i++)
        {
            if (num[i] != 1)
                flag = 0;
        }
        if (1 == flag)
            cout << setw(10) << STEP << setw(10) << MOD << "    Good Choice" << endl;
        else
            cout << setw(10) << STEP << setw(10) << MOD << "    Bad Choice" << endl;
        cout << endl;
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值