`
cq520
  • 浏览: 166581 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

完全随机数的产生

阅读更多

       清明时节,外面下起了大雨,听着雨点刷刷的淅沥声,我的心情也渐渐的平复下来,如蓝天般淡薄却又有云朵在上面漂浮着,废话不多说,下面进入正题:

       这一次跟大家分享一下如何产生一个完全不相同的随机数组,大家可能都知道如何产生一个随机数组,但是问题就是,我们所产生的随机数组里面很有可能还有很多是相同的数字,有时候我们需要的是产生一连串完全不相同的数字,有下面两种方法:

方法一:比较法

       将数组里面的每一个数组反复的进行比较,如果有相同的就继续产生新数,然后再比较,直到每一个数字都不相同为止,代码如下:

import java.util.Random;

publicclass Ran {

    publicstaticvoid main(String args[]){

       Ran r=new Ran();

       r.initArr();

       r.ranArr();

       r.print();

    }

    intarr[]=newint[10];

    //初始化一个数组

    publicvoid initArr(){

       Random ran=new Random();

       for(int i=0;i<arr.length;i++){

           arr[i]=ran.nextInt(10);

       }

    }

    //使数组里面的数完全随机

    publicvoid ranArr(){

       int n=1;

       boolean isNew=false;

       Random r=new Random();

       while(!isNew){

       for(int k=0;k<n;k++){

           for(int i=0;i<arr.length;i++){

              for(int j=i+1;j<arr.length;j++){  

                     if(arr[i]!=arr[j]){

                         isNew=true;

                     }

                     else{

                         arr[i]=r.nextInt(10);

                         n++;

                     }

                  }

              }

           }

       }

       System.out.println("循环进行了"+n+"");

    }

    //输出完全随机数数组

    publicvoid print(){

       for(int i=0;i<arr.length;i++){

           System.out.print(arr[i]+" ");

       }

    }

}

    到这里,问题又出现了,如果我们的运气比较背的话,可能这个循环执行了上千次还是有相同的(PS:如果这样的话最好去买两张彩票),那么我们就要思考有没有更简单的方法了。

    既然不想产生相同的数字,那么是不是可以产生了一个数之后就把这个数去掉,这样做当然是可以的,做法就是用一个队列将数组封装起来,产生了一个数之后就把这个数从队列里面删除,我们可以用JAVA里面自带的队列,也可以自定义队列,C语言照样可以实现,代码如下:

import java.util.ArrayList;

import java.util.Random;

publicclass RanArray {

    publicstaticvoid main(String args[]){

       RanArray ran=new RanArray();

       ran.randArr();

    }

    ArrayList<Integer> arr=new ArrayList<Integer>();

    inta[]=newint[10];

    publicvoid randArr(){

       for(int i=0;i<a.length;i++){

           a[i]=i;

           //将数组封装到队列当中

           arr.add(a[i]);

       }

       Random ran=new Random();

       int dex=arr.size();

       for(int j=0;j<dex;j++){

           //得到随机移除的数字

           int index=ran.nextInt(arr.size());

           int x=arr.remove(index);

           System.out.print(x+" ");

       }

    }

}

    这个方法的执行效率显然要高出很多。OK,今天就讲到这了。

清明时节雨纷纷,坐入红尘欲断魂,我欲乘风破茧来,明朝再看明月升。

分享到:
评论

相关推荐

    随机数产生与读取

    另一方面,真正随机数来源于物理现象,如电子噪声、放射性衰变等,它们无法完全预测。在某些高级应用中,如密码学,可能会用到这种随机数。 接下来,我们讨论如何将生成的随机数保存到文件中。在文件操作中,我们...

    混合同余法产生均匀分布随机数产生方法总结

    ### 混合同余法产生均匀分布随机数产生方法总结 #### 一、混合同余法概述 混合同余法是一种生成伪随机数的重要方法,主要用于生成均匀分布的随机数。这种方法由Lehmer在1951年提出,通过一系列数学公式来模拟...

    如何用spss产生随机数

    - **伪随机数**:例如“NORMAL(std dev)”等函数生成的是伪随机数,这类随机数虽然看起来是随机的,但实际上是由一个确定性的算法生成的,只要设置了相同的随机种子,就可以得到完全一致的结果。 **2.2 应用案例** ...

    基于visual的随机数产生代码

    总结来说,"基于visual的随机数产生代码"主要涉及了C语言中的`rand()`和`srand()`函数,以及如何通过它们来生成和控制随机数的范围。在Visual C++ 6.0环境下,这些功能可以通过简单几步操作实现。对于初学者,这是一...

    用c语言产生随机数.doc

    由于每次程序运行的时间几乎不可能完全相同,这种方法能确保每次程序执行时产生不同的随机数序列。例如: ```c #include #include #include int main(void) { int i; srand((unsigned)time(NULL)); // 使用...

    matlab产生随机数的几种方法整理

    这可以通过`rng`函数的第二个参数实现,如`rng('shuffle')`使用快速但可能不完全随机的算法,`rng('twister')`则使用Mersenne Twister算法,一种高质量的随机数生成器。 8. **分布参数估计** 在实际应用中,我们...

    随机数的产生原理与实现

    下面将详细讲解随机数的产生原理与实现方法。 首先,我们要理解“随机”并不意味着真正的无规律,而是指无法预测的结果。在计算机中,由于一切都是基于确定性的算法,所以生成的随机数是通过特定算法生成的伪随机数...

    c语言中rand()和srand()产生随机数方法比较

    `rand()` 时,它都会返回序列中的下一个随机数,如果没有使用 `srand()` 来设置种子,那么默认情况下,程序的启动时间被用作初始种子,这意味着如果程序多次运行而没有改变种子,将得到完全相同的随机数序列。...

    ADC作随机数_STM32F103_adc_

    由于微控制器的引脚在悬空时可能会受到环境噪声的影响,这些噪声会在ADC采样时引入不可预测的波动,从而产生看似随机的数字序列。这种随机性虽然不完全符合统计学上的真正随机性,但在某些应用中,如简单的游戏或...

    一个简单的产生随机数并冒泡排序的算法

    在这个“一个简单的产生随机数并冒泡排序的算法”程序中,开发者可能将随机数生成与冒泡排序结合起来,生成一系列随机数,然后使用冒泡排序对这些随机数进行排序。11.c.exe可能是编译后的可执行文件,而11.c.sln则是...

    随机数产生器,单纯型算法,Buffon针计算Pi

    一个高质量的随机数生成器能够产生看似无规律的序列,而且在统计上是均匀分布的。在C和C++编程中,标准库提供了如`&lt;random&gt;`头文件来生成各种分布的随机数,如均匀分布、正态分布等。用户可以通过设置种子来确保可...

    计算机中随机数的产生

    ### 计算机中随机数的产生 #### 概述 在计算机科学中,随机数是一种重要的工具,广泛应用于各种领域如密码学、模拟实验、游戏开发等。然而,计算机本质上是确定性的机器,不能真正生成完全随机的数字。因此,...

    随机数产生器(使用verilog编写的m序列,pn序列,经过了Matlab统计随机数服从随机分布,65536循环,完全够用)

    verilog编写,通过pn码进行自设计的高循环65536的随机数,合适跑仿真,已经在Matlab上进行统计验证,服从随机分布,适合FPGA等研究跑仿真以及运用。

    随机数生成器

    随机数生成器是一种在计算机程序中广泛使用的工具,它能够按照特定的算法产生一系列不可预测的数字,这些数字在理论上是等概率分布的。在给定的“随机数生成器”主题中,我们可以深入探讨以下几个关键知识点: 1. *...

    产生随机数的摇奖机产生随机数的摇奖机产生随机数的摇奖机产生随机数的摇奖机

    "产生随机数的摇奖机"实际上是指一个利用计算机程序生成随机数字的系统,这个系统可以模拟真实的摇奖过程,确保结果的不可预测性和公正性。 首先,我们要理解随机数的概念。在数学上,随机数是指在一个特定范围内无...

    随机数的产生

    相同的种子会导致完全相同的随机数序列,这在某些情况下是有利的,比如在测试和调试过程中需要可重现的结果;但在大多数应用中,我们希望每次运行程序时都能得到不同的随机数序列。 #### C语言中的`rand()`和`srand...

    如何快速产生指定区间内的随机数

    如果两次调用`srand()`函数使用相同的种子值,则它们生成的随机数序列将是完全相同的。通常情况下,我们会使用当前的时间作为种子,这样每次程序运行时都能得到不同的随机数序列。 #### 2.2 `rand()`函数 `rand()`...

    随机数检测规范

    然而,在实际应用中,完全随机的数据难以获取,因此需要一套科学的方法来评估和验证随机数的质量。为此,制定了《随机数检测规范》。 #### 二、范围 本规范旨在规定商业密码应用中随机性检测的标准和方法。具体而言...

    利用随机数加密通信数据.rar

    描述中提到的“加密通讯过程中需要随机数产生加密密钥”,揭示了加密流程的基本步骤。首先,通信双方需要共享一个密钥,这个密钥必须是随机的,以防止任何潜在的攻击者通过预测或枚举来解密信息。随机数生成器(RNG...

    C#控制台随机数,不产生重复的

    值得注意的是,虽然我们使用了时间戳作为种子,但`Random.Next()`方法生成的随机数并不一定是完全均匀分布的。在某些特定的种子下,可能会出现部分数值出现概率较高的情况。如果你需要更高质量的随机数,可以考虑...

Global site tag (gtag.js) - Google Analytics