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

WP主题讨论 WP主题讨论 主题:1013 回复:2239

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

虐人心 发布于 2017-01-03 字数 25 浏览 1110 回复 5

可用任何语言写答案

发布评论

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

支持 Markdown 语法,需要帮助?

评论(5

夜无邪 2017-10-25 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)

瑾兮 2017-10-07 4 楼

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

甜柠檬 2017-07-27 3 楼

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 2 楼

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

因为个数不是很庞大

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

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

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

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

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

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

夜无邪 2017-03-31 1 楼

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

}