问题描述:
计算机模拟通常需要随机数。生成伪随机数的一种方法是通过窗体的函数

seed(x+1) = [种子 (x) + STEP]% MOD

其中 "%" 是模量运算符。

这样的函数将生成0和 MOD-1 之间的伪随机数 (种子)。此窗体的函数的一个问题是, 它们总是会反复生成相同的模式。为了最大限度地减少这种影响, 仔细选择 STEP 和 MOD 值可以在 (包括) 0 和 MOD-1 之间实现所有值的均匀分布。

例如, 如果 STEP = 3, MOD = 5, 则该函数将在重复循环中生成一系列伪随机数0、3、1、4、2。在本例中, 函数的每个 MOD 迭代都将生成0和 MOD-1 之间的所有数字, 包括0和 MOD-1。请注意, 根据每次发生种子 (x) 的函数生成相同 seed(x+1) 的性质, 这意味着如果一个函数将生成介于0和 MOD-1 之间的所有数字, 则它将在每个 MOD 迭代中均匀地生成伪随机数。

如果 STEP = 15, MOD = 20, 则该函数将生成系列0、15、10、5 (如果初始种子不是 0, 则生成任何其他重复系列)。这是一个很好的选择 STEP 和 MOD, 因为没有初始种子将生成所有的数字从0和 MOD-1。

您的程序将确定 STEP 和 MOD 的选择是否会生成伪随机数的均匀分布
输入:
每行输入将包含一对整数的 STEP 和 MOD 按顺序 (1 < = STEP, MOD < = 100000)。
3 5
15 20
63923 99999
 
 
输出:
对于每行输入, 您的程序应打印步骤值右对齐列1到 10, MOD 值右对齐在列11到20和 "好的选择" 或 "坏选择" 左对齐在第25列。当选择 step 和 MOD 将生成 MOD 数字时, 生成包括0和 MOD-1 之间的所有数字时, 应打印 "良好选择" 消息。否则, 程序应打印消息 "错误的选择"。在每个输出测试集之后, 程序应只打印一个空行。
         3         5    Good Choice

        15        20    Bad Choice

     63923     99999    Good Choice
 
#include <iostream>
#include<cstring>
#include<cstdlib>
#include<stdio.h>
using namespace std;
int main()
{
    int step,mode;
    while(cin>>step>>mode){
        int i,j,flag;
        for(i=0;i<mode;i++)
        {
            char num[100001]={'0'};
            int seed;
            seed=(i+step%mode)%mode;
            num[seed]='1';
            for(j=1;j<mode;j++)
                {
                    flag=0;
                    seed=(seed+step%mode)%mode;
                    if(num[seed]=='1')
                    {
                        flag=1;
                        break;
                    }
                    else num[seed]='1';
                }
                if(!flag)
                    break;
        }
        printf("%10d%10d    ",step,mode);
        if(!flag)
            printf("%-s\n","Good Choice");
            else printf("%-s\n","Bad Choice");
            printf("\n");
    }
    return 0;
}

最新文章

  1. Eclipse代码和xml文件的智能提示
  2. Windows Server 2008 下解析二级域名的方法
  3. springmvc 解决跨域CORS
  4. Android Studio 2.2.2 发布
  5. php工作笔记1-数组常用方法总结,二维数组的去重,上传图片到oss服务器
  6. Oracle的update语句优化研究
  7. [原]如何用Android NDK编译FFmpeg
  8. zabbix配置发送报警邮件
  9. jQuery的Deferred
  10. SimpleHttpServer的学习(1)
  11. 删除vector中的偶数元素,删除list中的奇数元素
  12. OpenUrl 的跨平台实现
  13. MSSQL 日期操作函数 总结
  14. 项目中dubbo的使用
  15. 用Date.ToString()输出中英文月份
  16. struts2之拦截器
  17. Android 开发笔记___SD卡基本操作__图片读取写入
  18. git创建本地分支以及推送本地分之至远程分支
  19. RSA 非对称加密【转】
  20. 027 ResourceBundle.getBundle方法

热门文章

  1. 容器逃逸 --with docker.sock
  2. B - Yet Another Palindrome Problem
  3. element-ui学习之-------input表单验证【各种情况总结】
  4. 51电子-STC89C51开发板:目录
  5. shell脚本变量加减
  6. redis相关入门知识
  7. Linux Shell开发功能点
  8. Element---&gt;&gt;&gt;最新骨架屏Skeleton使用
  9. window操作
  10. File.createTempFile()