请问用java从1-33个整数中随机抽取6个数字 且不重复 该怎么写?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问用java从1-33个整数中随机抽取6个数字 且不重复 该怎么写?相关的知识,希望对你有一定的参考价值。

public static void main(String[] args)
int[] x = new int[33]; //创建值为1-33的整数表, 初始化
for (int i = 0; i < x.length; i++)
x[i] = i+1;

// -------------------------------------------------
for (int i = 0; i < 6; i++) // 随机取值6次 (你可以把6改成33. 试试看会不会出现重复值)
int j = (int) (Math.random()*(33-i)); // 随机值依次递减1, 以保证不可能重复随机到33这个值
System.out.println("第" + (i+1) + "个随机数为: "+ x[j]);// 输出随机值(真正的随机值为整数表x中的数)
x[j] = x[33-i-1]; // 整数表x中已被随机到的值替换为表中最后一个数, 避免以后可能随机到

// -------------------------------------------------
// 整个思路你可以想象成是栈堆的出栈, 随机到的值出栈, 就不会随机到重复值


有问题欢迎继续提问, 希望能帮你解决问题!
参考技术A int[] n= 1,2,3.......32;//创建值为1-33的整数表, 初始化
int[] m =-1,-1,-1,-1,-1,-1;
int k=0;
main_loop:
while(k <6)
int x = (int)(Math.random()*100)%6;
for(int j=0;j <k;j++)
if(m[j]==x)continue main_loop;

m[k]=x;
k++;
System.out.println(n[x]);

从数组中选择不相等的随机整数(python)

【中文标题】从数组中选择不相等的随机整数(python)【英文标题】:choosing non-equal random integers from an array (python) 【发布时间】:2013-11-30 07:13:20 【问题描述】:

我对 python 很陌生。我需要在 1 到 100 之间抽取 5 个随机数。但是,这五个数字不能相同。我正在考虑创建一个向量(范围(1, 101))并从向量中提取随机值,然后创建一个循环,说明第二次绘制是否等于第一次绘制,然后绘制另一个随机数,如果之后绘制等于前两次再抽一次,以此类推,直到抽到5个不相等的随机数。有没有更优雅的方法来做到这一点?

【问题讨论】:

random.sample(range(1, 101), 5) 另外,在 python 中,这称为列表。 【参考方案1】:

使用random.sample:

>>> from random import sample
>>> sample(range(1, 101), 5)
[86, 90, 20, 72, 49]

【讨论】:

这不会选择两个相同的整数吗?例如:[86, 90, 20, 86, 49] ? @user3000626:阅读文档!如果输入没有重复,那么输出中也永远不会有重复。【参考方案2】:

您想要的是Fisher-Yates shuffle 的变体。我不“做”python(我偏爱 Java 人),但是,它很简单....

以有序的方式创建源“集”的数组(从 1 到 101 的数组)。

然后你所做的就是将变量last 设置为array.size - 1,然后执行以下操作:

int[] ret = new int[5] // return array of 5 members.
for (int i = 0; i < 5; i++)  // 5 is the number of values you want.
    int rand = random(last + 1) // get a random integer from 0 to last (includes last)
    # put the value at array[rand] in your return array var
    ret[i] = array[rand]
    # move the value at the end to the value we just copied out:
    array[rand] = array[last]
    # decrease the size of the values we can select from:
    last--;

这样你就可以从你的集合中选择 5 个随机值。没有重复,都具有相同的概率。

完整的 Fisher-yates shuffle 可以就地对整个阵列执行此操作。我只是使用了你需要的部分算法。

【讨论】:

以上是关于请问用java从1-33个整数中随机抽取6个数字 且不重复 该怎么写?的主要内容,如果未能解决你的问题,请参考以下文章

VBS产生随机不重复的数字

JavaScript问题:一个有一百个随机数字的数组中(可能有重复数字),随机抽取十个,且这十个数字不重复。

C语言中,怎么从0~9中随机抽取4个不同的数字

请问:java产生6个数字的随机数怎么写?

用VB做一个产生随机数的程序

ArrayList集合练习题