清明时节,外面下起了大雨,听着雨点刷刷的淅沥声,我的心情也渐渐的平复下来,如蓝天般淡薄却又有云朵在上面漂浮着,废话不多说,下面进入正题:
这一次跟大家分享一下如何产生一个完全不相同的随机数组,大家可能都知道如何产生一个随机数组,但是问题就是,我们所产生的随机数组里面很有可能还有很多是相同的数字,有时候我们需要的是产生一连串完全不相同的数字,有下面两种方法:
方法一:比较法
将数组里面的每一个数组反复的进行比较,如果有相同的就继续产生新数,然后再比较,直到每一个数字都不相同为止,代码如下:
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年提出,通过一系列数学公式来模拟...
- **伪随机数**:例如“NORMAL(std dev)”等函数生成的是伪随机数,这类随机数虽然看起来是随机的,但实际上是由一个确定性的算法生成的,只要设置了相同的随机种子,就可以得到完全一致的结果。 **2.2 应用案例** ...
总结来说,"基于visual的随机数产生代码"主要涉及了C语言中的`rand()`和`srand()`函数,以及如何通过它们来生成和控制随机数的范围。在Visual C++ 6.0环境下,这些功能可以通过简单几步操作实现。对于初学者,这是一...
由于每次程序运行的时间几乎不可能完全相同,这种方法能确保每次程序执行时产生不同的随机数序列。例如: ```c #include #include #include int main(void) { int i; srand((unsigned)time(NULL)); // 使用...
这可以通过`rng`函数的第二个参数实现,如`rng('shuffle')`使用快速但可能不完全随机的算法,`rng('twister')`则使用Mersenne Twister算法,一种高质量的随机数生成器。 8. **分布参数估计** 在实际应用中,我们...
下面将详细讲解随机数的产生原理与实现方法。 首先,我们要理解“随机”并不意味着真正的无规律,而是指无法预测的结果。在计算机中,由于一切都是基于确定性的算法,所以生成的随机数是通过特定算法生成的伪随机数...
`rand()` 时,它都会返回序列中的下一个随机数,如果没有使用 `srand()` 来设置种子,那么默认情况下,程序的启动时间被用作初始种子,这意味着如果程序多次运行而没有改变种子,将得到完全相同的随机数序列。...
由于微控制器的引脚在悬空时可能会受到环境噪声的影响,这些噪声会在ADC采样时引入不可预测的波动,从而产生看似随机的数字序列。这种随机性虽然不完全符合统计学上的真正随机性,但在某些应用中,如简单的游戏或...
在这个“一个简单的产生随机数并冒泡排序的算法”程序中,开发者可能将随机数生成与冒泡排序结合起来,生成一系列随机数,然后使用冒泡排序对这些随机数进行排序。11.c.exe可能是编译后的可执行文件,而11.c.sln则是...
一个高质量的随机数生成器能够产生看似无规律的序列,而且在统计上是均匀分布的。在C和C++编程中,标准库提供了如`<random>`头文件来生成各种分布的随机数,如均匀分布、正态分布等。用户可以通过设置种子来确保可...
### 计算机中随机数的产生 #### 概述 在计算机科学中,随机数是一种重要的工具,广泛应用于各种领域如密码学、模拟实验、游戏开发等。然而,计算机本质上是确定性的机器,不能真正生成完全随机的数字。因此,...
verilog编写,通过pn码进行自设计的高循环65536的随机数,合适跑仿真,已经在Matlab上进行统计验证,服从随机分布,适合FPGA等研究跑仿真以及运用。
随机数生成器是一种在计算机程序中广泛使用的工具,它能够按照特定的算法产生一系列不可预测的数字,这些数字在理论上是等概率分布的。在给定的“随机数生成器”主题中,我们可以深入探讨以下几个关键知识点: 1. *...
"产生随机数的摇奖机"实际上是指一个利用计算机程序生成随机数字的系统,这个系统可以模拟真实的摇奖过程,确保结果的不可预测性和公正性。 首先,我们要理解随机数的概念。在数学上,随机数是指在一个特定范围内无...
相同的种子会导致完全相同的随机数序列,这在某些情况下是有利的,比如在测试和调试过程中需要可重现的结果;但在大多数应用中,我们希望每次运行程序时都能得到不同的随机数序列。 #### C语言中的`rand()`和`srand...
如果两次调用`srand()`函数使用相同的种子值,则它们生成的随机数序列将是完全相同的。通常情况下,我们会使用当前的时间作为种子,这样每次程序运行时都能得到不同的随机数序列。 #### 2.2 `rand()`函数 `rand()`...
然而,在实际应用中,完全随机的数据难以获取,因此需要一套科学的方法来评估和验证随机数的质量。为此,制定了《随机数检测规范》。 #### 二、范围 本规范旨在规定商业密码应用中随机性检测的标准和方法。具体而言...
描述中提到的“加密通讯过程中需要随机数产生加密密钥”,揭示了加密流程的基本步骤。首先,通信双方需要共享一个密钥,这个密钥必须是随机的,以防止任何潜在的攻击者通过预测或枚举来解密信息。随机数生成器(RNG...
值得注意的是,虽然我们使用了时间戳作为种子,但`Random.Next()`方法生成的随机数并不一定是完全均匀分布的。在某些特定的种子下,可能会出现部分数值出现概率较高的情况。如果你需要更高质量的随机数,可以考虑...