从长度为100的数字数组中随机抽取20个不重复的数字

供稿:hz-xin.com     日期:2025-01-16
急,要用Random,0到100随机生成20个数组不能重复出现

/** * 这个事从10000个数里 随机9000个不同的 *//public class RandomTest {static Random random = new Random();public static void main(String[] args) {long begin,end;Date date = new Date();begin = date.getTime();//1970年1月1日到现在毫秒值getNum2();date = new Date();end = date.getTime();System.out.println("用时:"+(end-begin));}//最笨的方法 时间最长public static void getNum1(){int param;//List list = new ArrayList();//1415毫秒Set jihe = new HashSet();//871毫秒for (int i = 0; i jihe = new ArrayList();// 43毫秒//Set jihe = new HashSet();// 41 毫秒for (int i = 0; i < 10000; i++) {jihe.add(i);}for (int i = 0; i < jihe.size(); i++) {if(i == 9000){return;}param = (int) (random.nextDouble()*(10000-i)) ;jihe.remove(param);System.out.println(param);}}}

//比如这个数组有100多个值var arr = new Array(1,3,2,3,5,5,4,6,8,9,10,11,11,12,12,13,13,14);//获取数组中的随机值函数function rand(arr){ var num = parseInt(Math.random()*(arr.length)); return arr[num];}//创建一个新数组arr2 = new Array();//从arr中抽出10个不重复的值赋予arr2var i = 1;while(i'); alert('抽取的第'+i+'个数字为'+num); i++; }else{ alert('抽取的结果中已存在'+num+'需要重新获取'); }}

int arrA[100] ;//长度为100的数组
int arrB[20];//准备存放20个不重复的数字

for(int i = 0; i < 100; i++) arrA[i] = rand(); //长度为100的数组中填充随机数,可能有重复的数字
for(int i = 0; i < 20; i++) { //从100个数中抽取20个数

while(1){
int tempB = arrA[rand % 100]; //从100个数中随机抽取一个数

bool C = true; //定义布尔变量 如果重复则false 反之则true 默认重复
for(int j = 0; j < i; j++){
if (arrB[j] == tempB){ //判断有无重复
C = false;
}
}
if (C){ //如果无重复
arrB[i] = tempB; //赋值
break; //跳出本次While循环进行下个数的抽取
}

}

这种问题实现方法有很多种,这只是一种解决思路,C++语言编写,如果用转成C的话只需把所有的变量定义在函数头就可以了,rand()是STD库中提供的标准函数。

这个方法有个BUG就是如果当arrA数组中数小于20种,那么这段程序将陷入死循环中,解决办法是在抽取之前判断一下,arrA数组中数是不是小于20种,方法如下。

int datatype = 0; //arrA数组中数据种类

for(int i = 0; i < 100; i++){
bool D = true;
for(int j = 0; j < i; j++){
if (arrA[j] == arrA[i]){ //逐次判断有无重复
D = false;
}
}
if (D) {
datatype++;
}
}

如果datatype大于等于20,再执行抽取数据操作。

以上代码未经过编译器,不一定直接能编译过去,但思路已表达清楚,纯手敲,望采纳。

9. 生成一个数组,长度为100,每个元素都是0-9的随机数。写一个函数,计算...
include <stdio.h> include <stdlib.h> include int main(){ int i,n,a[100],b[10]= {0};srand(time(0));for(i=0; i<100; i++){ a[i]=rand()%10;b[a[i]]++;} for(i=0; i<10; i++)printf("%d:%2d\\n",i,b[i]);return 0;} ...

定义一个整型数组a[100],怎样随意输入任意个数(注意:随意输入的,连自己...
for(int i=0;i<100;++i){ scanf("%d",&a[i]);if(getchar()=='\\n')break;} 这样你就可以把输入的数按顺序一个个存到数组里面了,在你打入回车符\\n后就意味着输入结束(你也可以把它改成别的),结束后i+1的值就是你输入的个数了 ...

c语言实现从一个数组中随机抽取一个元素
随机产生一个数,然后每次将数组元素的最后一个数与这个数交换,并且数组的长度减1。代码如下:include<stdio.h> include<stdlib.h> define N 100 int main(){ int a[N];int i,t,tag;for(i=0;i<N;i++)a[i] = i;tag = N-1;while(tag){ i = rand()%tag;t = a[i];a[i] ...

c语言怎么实现从一个数组中随机抽取一个元素?
随机产生一个数,然后每次将数组元素的最后一个数与这个数交换,并且数组的长度减1。int [] b = new int[100];int t = 0, idx = 0, len = a.length;for(int i=0;i<len;i++){ idx = [rand()*(len-i)];b[i] = a[idx];t = a[idx];a[idx] = a[len - 1];a[len -...

...每个数组中有500成员 我每次需要随机从100个数
用多维数组 加计次循环即可,很简单用不到多庞大的代码 手机回答的简单举例:定义数组 a 成数一维100 二维500 定义数组 b 成数一维100 二维500 计次循环(100,计数1)随机数=取随机数(1,100)计次循环(500,计数2)b〔计数1〕〔计数2〕=a〔随机数〕〔计数2〕你说的交集什么的我没听懂。

随机生成【1,100】之间的10个整数存放在数组中。
srand((unsigned)time(&t));\/\/随机数的产生与系统时间有关 for(i=0;i<SIZE;i++) \/\/输出生成数结果 { ary[i]=rand()%100+1;printf("The unifrom randrom number %d is %d\\n",i+1,ary[i]);} arry(ary);\/\/调用排序函数 for(k=0;k<SIZE;k++)\/*输出排序结果,不是必需的*\/ ...

如何用c语言实现:定义一个1~100的int数组,随机从里边选择十个数字?
printf("输入元素个数");scanf("%d",&m);for(i = 0; i<m; ++i)scanf("%d",&a[i]);p=m;} void display(int *a, int *p){ int i;for(i = 0; i < *p; ++i)printf("%5d",a[i]);printf("\\n");} void main( ){ int a[10],n=0,m;do{ printf("1,输入数组\\n...

定义了一个数组,如何随机从中抽出一个数
a[rand()%100]就是随机数组中的元素了,rand()是取随机数的函数,不过每次的种子是相同的,也就是说你每次运行都是取相同的一组数.要取不同的随机数的话程序如下:include void main(){int a[100];srand(time(NULL));a[rand()%100];} ...

c语言中怎么随机抽选100个数字并排序?
include <stdio.h> include <stdlib.h> int main(){ int num[100];int time=0;int numtemp;while (1) \/\/取随机数 { numtemp = rand()%1000;if (numtemp >= 100 && numtemp <=999 ){ num[time] = numtemp;time++;} if (time == 100){ break;} } \/* for(int i=0; i<...

易语言问题:有100个随机的数字怎么取出出现次数最多的那个数字?
思路.2个方法能实现,具体代码就不帮你写了.1,循环100次取随机数,把结果写入数组,然后在判断数组里那个数字最多.2.循环100次取随机数,把结果统计到二维数组,数组[数字0-9][对应的次数]. 然后判断那个数字的次数最多