美文网首页
伪随机数及避免重复的方法

伪随机数及避免重复的方法

作者: ZayAlan | 来源:发表于2017-04-24 16:25 被阅读0次

伪随机数实现

#include <limits.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
class TRandom
{
public:
    TRandom(long seed=0){mSeed=(seed?seed:GetTickCount());}
    void Seed(long seed=0)  { mSeed=(seed?seed: GetTickCount( )); }
    int  Integer()                { return Next();}
    int  Integer(int min,int max) { return min+Next()%(max-min+1);}
    double Real()               {return double(Next())/double(INT_MAX);}
private:
    void Change()       {mSeed=(314159265*mSeed+13579)%ULONG_MAX;}
    int  Next() {
                int loops=mSeed%3;
                for (int i=0;i<=loops;i++)
                    Change ();
        return int(mSeed/2);
            }
    unsigned long  mSeed;
};

避免重复的使用方法

法一
洗牌例子:

#include"TRandom.h"
#include<iostream>
using namespace std;
int main()
{
    int poker[54],i,j;
    TRandom t;
    for (i=0;i<54;i++)
    {
        poker[i]=t.Integer(0,53);
        int flag=1;                     //增加了flag结合while避免出现重复数
        while(flag==1)
        {
            for(j=0;j<i;j++)
                if(poker[i]==poker[j])
                    break;
            if(j<i)
                poker[i]=t.Integer(0,53);
            if(j==i)
                flag=0;
        }

    }
    for(i=0;i<54;i++)
    {
        cout<<poker[i]<<" ";
    }
    return 0;
}

法二

#include "TRandom.h"
#include<iostream>
int main()
{
        int cards[54];
    for(int i=0;i<54;++i)
        cards[i]=i+1;
        TRandom rand;   //创建伪随机数发生器的一个实例对象
  //以下是洗牌过程
         for(int j=0;j<54;++j) {
          int pos=rand.Integer(j,53); //pos是一个[j,53]之间的随机数
                  //交换cards[j]和cards[pos];
                  int temp=cards[j];
                  cards[j]=cards[pos];
                   cards[pos]=temp;
       }
//输出洗牌结果
         for (int k=0;k<54;++k)
                    cout<<"Cards["<<k<<"]="<<cards[k]<<endl;
         return 0;  
}

相关文章

  • 伪随机数及避免重复的方法

    伪随机数实现 避免重复的使用方法 法一洗牌例子: 法二

  • 随机数

    1、Math.random()方法——伪随机数 Math类中存在一个random()方法,用于产生随机数,这个方法...

  • 伪随机数算法生成高斯分布

    伪随机数算法 平方取中法(Middle-square method)是个产生伪随机数的方法,由冯·诺伊曼在1946...

  • 密码学基础之伪随机数

    随机数分类 真随机数 伪随机数2.1 强伪随机数2.2 弱伪随机数 真随机数:其定义为随机样本不可重现。实际上只要...

  • JS如何清除浏览器本地缓存问题

    方法一:用随机数,随机数也是避免缓存的一种很不错的方法! 方法二:用随机时间,和随机数一样。 方法三:用php后端...

  • 多线程环境下生成随机数

    生成伪随机数据 Java里有伪随机型和安全型两种随机数生成器。伪随机生成器根据特定公式将seed转换成新的伪随机数...

  • 生成随机数

    两个C函数 rand()函数生成的随机数是伪随机数,所谓伪随机数,指的是程序每次运行,生成的随机数都是不变的,生成...

  • Python random 模块详解

    我们可以先来了解下伪随机数和真随机数的概念。 伪随机数:伪随机数是用确定性的算法计算出来自[0,1]均匀分布的随机...

  • python项目实战:实现蒙特卡罗方法,求物体阴影面积

    前言 蒙特卡罗方法是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。与它对应的是确定性算法。蒙特·卡罗...

  • python中random模块功能详解(python工程狮)

    random — 生成伪随机数,random模块为各种分布实现伪随机数的生成。 1.random.random()...

网友评论

      本文标题:伪随机数及避免重复的方法

      本文链接:https://www.haomeiwen.com/subject/jjypzttx.html