算法-给出1-10数字,如何快速获得3个不重复的数字?

发布于 2017-01-03 04:21:55 字数 16 浏览 1218 评论 5

可用任何语言写答案

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

夜无邪 2017-10-25 08:18:31

 #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)

瑾兮 2017-10-07 05:01:09

所有数字组成一个循环链表,然后随机走n步,取一个,并从链表上删除;如此循环三次即可。

甜柠檬 2017-07-27 13:28:04

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;
}

瑾兮 2017-05-28 11:39:19

首先这道题目必须要遍历一遍数组

因为个数不是很庞大

所以只需要 使用类似冒泡的方法

不过发现相等的 就从元素集合中抛去两个元素 虽然他们相等但是他们占用了两个存储空间

这样效率不会太高
还有一种方法是 用散列容器实现

每个元素分别添加到容器中

如果出现添加失败 那么很好 将这个元素在散列容器中删除 或者 他不是有k 和v么 v的记录写成与单个元素不同以示区分

这样 当将全部元素都加入到容器的时候 就可以了 如果已经删除了重复元素 那么 直接输出容器前三个 如果没有 那么 比对v 如果为单一的那种值 就输出 输出三个为止

夜无邪 2017-03-31 16:56:24

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]);
}

}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文