【发布时间】:2018-07-27 11:54:47
【问题描述】:
用途:以随机顺序存储 1-1000 之间的数字。
我的代码:
#include<time.h>
int main(){
int arr[1000]={0}, store[1000];
for(int i=0;i<1000;i++){
int no;
while(1){
srand(time(0));
no=rand();
no%=1001;
if(no==0)
continue;
//This ensures Loop will continue till the time a unique random number is generated
if(arr[no-1]!=no){
arr[no-1]=no;
break;
}
}
store[i]=no;
}
对我来说,代码运行得非常好,但是,我花了 58 分钟来执行。有没有办法加快程序?
实际目的:我有大约 4000 名员工,我想为即将到来的项目给他们每个人一个唯一的随机数。
我尝试使用1000执行代码来检查效率。
【问题讨论】:
-
与您的问题有点相关:您应该只调用
srand一次。如果您在紧密循环中调用它,您将多次将种子设置为相同的值,这将导致多次生成相同的随机数。 -
@Someprogrammerdude 这非常相关。您可以将其发布为答案。 :-)(或查找重复项)
-
每个员工肯定都有一个员工编号 - 可以吗?
-
我的意思是只调用 srand 一次
-
@WilliamJBagshaw 请阅读我提供的关于设置数据结构的链接。它是一种包含唯一键的数据类型。您不能插入重复项。这就是为什么人们可以生成随机数而无需检查重复项,因为这将通过插入到集合中来处理。
标签: c performance