请问怎样处理,在1-1000之间产生100个随机数,让这些随机数不重复,怎么办。。

lz98630 2001-11-05 04:15:56
请问怎样处理,在1-1000之间产生100个随机数,让这些随机数不重复,怎么办。。
...全文
602 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
leojay 2001-11-07
  • 打赏
  • 举报
回复
我的方法,
a[0]=rand()*10+1;
for(int i=1; i<100;i++)
a[i]=a[i-1]+rand()*10+1;
简单,一定不会重复。
孩皮妞野 2001-11-07
  • 打赏
  • 举报
回复
#include <algorithm>
#include <iostream>

using namespace std;

int buff[1000];
for(int i=0;i<1000;i++)
buff[i]=i;

//楼上说的交换算法已经在stl的random_shuffle中实现了
//如果你有幸使用的是C++,就不用费劲自己写代码了
random_shuffle(buff,buff+1000);

//now the first 100 elements meet your requirement
for(int i=0; i<100;i++)
cout<<buff[i]<<" ";
franking 2001-11-06
  • 打赏
  • 举报
回复
msdn
lazecat 2001-11-06
  • 打赏
  • 举报
回复
先定义一个含有一千个元素的数组A[999],让A[0]=0,A[1]=1,A[2]=2 …… A[999]=[999]。
然后从0到999取一个随机数N,然后和第 999-N 的元素交换数据。如果要取100个数据,就做100次循环,取前A[0]到A[99],就是你要的数据。
最坏的结果就是每次都取1,都和第998个元素交换数据,经过100次循环后,你得到的结果就应该是0,1,2,3,4,5,…… ,99。如果在从0到999取随机数时取出了0,1,2,3, …… ,99,经过100次运算后,数组就变成999,998,997,996, …… 3,2,1,0。这样,取出的数据就是:999,998,997,996, ……

明白了?
hotyei 2001-11-06
  • 打赏
  • 举报
回复
看到了吗?已经取得的值就和数组的最后一个数替换。而循环的第一句就是如果取1000-i数组之间的值,也就是说,当取了第一个值时,第二个值就只能取前999个值了,而第1000个值就是已经取过的了。
frman 2001-11-06
  • 打赏
  • 举报
回复
俺还是觉得Arter的办法好:)
lz98630 2001-11-06
  • 打赏
  • 举报
回复
to hotyei(花心萝卜)

由于我是一个初学者,最后一句(Array[R]=Array[1000-i]; //程序关键)没有理解。可以说简单点不。
Arter 2001-11-06
  • 打赏
  • 举报
回复
设范围: a[0]..a[M-1](M>=N)
将这M个数进行任意次的两两交换,由随机数产生下标.
然后,M个数的前N个数即是.
hotyei 2001-11-06
  • 打赏
  • 举报
回复
定义一个数组int Arrary[1000];
int Store[100];//这个数组用来装随机数的

for (int i=1;i<=1000;i++
Array[i]=i;

//产生100个随机数
for (int i=0;i<100;i++)
{
int R=rand()%(1000-i);
Store[i]=Array[R]; //保存随机数
Array[R]=Array[1000-i]; //程序关键
}
flagfly 2001-11-06
  • 打赏
  • 举报
回复
没办法不重复,只能重复后抛弃再选取。
liuer 2001-11-05
  • 打赏
  • 举报
回复
一本参考书上的例子:
INT(RAN *10)
RANDMIZE
上面这个单词也许写错了,但反正有这样一个VB语句吧,这样就绝不会有重复的随机数了
KingOf007 2001-11-05
  • 打赏
  • 举报
回复
rand()看看有没有重复。如果有就再rand()

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧