HDU—— 1014 Uniform Generator

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014086857/article/details/41146155

题意:对于公式:seed(x+1) = [seed(x) + STEP] % MOD,给定STEP和MOD,如果将STEP和MOD带入公式后所产生的循环中,对于一个循环中能产生0~MOD-1当中的所有数,此时输出Good Choice,否则输出Bad Choice,其中seed[0] = 0。

解题思路:如果公式能在MOD步当中产生0~MOD-1当中的所有数,则此时就可以输出Good Choice,否则输出Bad Choice,因为若想保证在迭代过程中不产生其他无关数字,那么在MOD步当中就应该产生出所有0~MOD-1的数字。详见代码。

Code:

#include <iostream>
#include <cstdio>
using namespace std;
#define maxn 100000

int seed[maxn];
void function(int step,int mod)
{
    int i=0;
    do{
        i++;
        seed[i] = (seed[i-1] + step)%mod;
    }while(seed[i]);
    if(i != mod )
        printf("%10d%10d    Bad Choice\n\n", step, mod);
    else
        printf("%10d%10d    Good Choice\n\n", step, mod);
}

int main()
{
    int step,mod;
    while(scanf("%d%d",&step,&mod)==2)
    {
        seed[0]=0;
        function(step,mod);
    }
    return 0;
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页