public class Test {
public static void main(String[] args) {
int N=10,m=3,e=0;//定义要取几个不重复的随机数m,N,游标
int []x=new int[m];
while(e<m)
{
int g=(int) (Math.random()*N+1);//随机数
boolean b=true;
for(int i=0;i<e;i++)
if(g==x[i]){b=false;break;}
if(b){x[e]=g;e++;}
}
//打印
for(int i=0;i<x.length;i++)
System.out.println(x[i]);
}
发布评论
评论(5)
#Python
import random
def getRandomNumber (n=3, Max=10, Min=0):
#n为要取的数字个数,Max为随机数上限,Min为随机数下限
x = []
num=0
temp=0
while (num<n):
temp=random.randint(Min, Max)
if x.find(temp):
break
else:
x.append(temp)
num+=1
return x
print getRandomNumber(3, 10, 0)
所有数字组成一个循环链表,然后随机走n步,取一个,并从链表上删除;如此循环三次即可。
int main()
{
int i,a[10],count=0,temp;
BOOL mark[10];
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
mark[a[i]]=FALSE;
}
srand(time(NULL));
while(count<3)
{
temp=rand()%10;
if(a[temp])
continue;
else
{
printf("%d ",a[temp]);
count+=1;
mark[a[temp]]=TRUE;
}
}
return 0;
}
首先这道题目必须要遍历一遍数组
因为个数不是很庞大
所以只需要 使用类似冒泡的方法
不过发现相等的 就从元素集合中抛去两个元素 虽然他们相等但是他们占用了两个存储空间
这样效率不会太高
还有一种方法是 用散列容器实现
每个元素分别添加到容器中
如果出现添加失败 那么很好 将这个元素在散列容器中删除 或者 他不是有k 和v么 v的记录写成与单个元素不同以示区分
这样 当将全部元素都加入到容器的时候 就可以了 如果已经删除了重复元素 那么 直接输出容器前三个 如果没有 那么 比对v 如果为单一的那种值 就输出 输出三个为止
public class Test {
public static void main(String[] args) {
int N=10,m=3,e=0;//定义要取几个不重复的随机数m,N,游标
int []x=new int[m];
while(e<m)
{
int g=(int) (Math.random()*N+1);//随机数
boolean b=true;
for(int i=0;i<e;i++)
if(g==x[i]){b=false;break;}
if(b){x[e]=g;e++;}
}
//打印
for(int i=0;i<x.length;i++)
System.out.println(x[i]);
}
}