随机数

dandan澹澹 2011-07-19 09:29:34
请问怎么产生不重复的随机数?
...全文
104 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lengwuqin 2011-07-19
  • 打赏
  • 举报
回复
先使用srand(time(NULL))函数,里面的参数是种子,再使用rand函数得到值!
赵4老师 2011-07-19
  • 打赏
  • 举报
回复
随机必然有重复,不重复就不叫随机,而叫洗牌。
洗牌算法请参考:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int d[6];
int i,n,a,b,t;
int c,j;
void main() {
srand(time(NULL));
printf("shuffle 0..n-1 demo\n");
for (n=1;n<=5;n++) {/* 测试1~5个元素 */
printf("_____n=%d_____\n",n);
j=1;
for (c=1;c<=n;c++) j=j*c;/* j为n! */
j*=n*2;
for (c=1;c<=j;c++) {/* 测试n*2*n!次 */
for (i=0;i<n;i++) d[i]=i;/* 填写0~n-1 */
for (i=n;i>0;i--) {/* 打乱0~n-1 */
a=i-1;b=rand()%i;
if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
}
printf("%04d:",c);
for (i=0;i<n;i++) printf("%d",d[i]);
printf("\n");
}
}
printf("shuffle 1..n demo\n");
for (n=1;n<=5;n++) {/* 测试1~5个元素 */
printf("_____n=%d_____\n",n);
j=1;
for (c=1;c<=n;c++) j=j*c;/* j为n! */
j*=n*2;
for (c=1;c<=j;c++) {/* 测试n*2*n!次 */
for (i=1;i<=n;i++) d[i]=i;/* 填写1~n */
for (i=n;i>1;i--) {/* 打乱1~n */
a=i;b=rand()%i+1;
if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
}
printf("%04d:",c);
for (i=1;i<=n;i++) printf("%d",d[i]);
printf("\n");
}
}
}
szqh97 2011-07-19
  • 打赏
  • 举报
回复
http://blog.myspace.cn/e/402385752.htm
到这里看看吧,挺详细的,关于随机数的
Xomic 2011-07-19
  • 打赏
  • 举报
回复
记得加头文件#include<time.h>
Xomic 2011-07-19
  • 打赏
  • 举报
回复
用一个时间休眠函数!
int main
{
srand((int)time(NULL));
size_t p = rand();
cout<<p<<endl;
system("pause");
return 0;
}
luuillu 2011-07-19
  • 打赏
  • 举报
回复

for (i=0; i<N-1; ++i)
for (j=i+1; j<N; ++j)
{
int t, tmp;
t = j + rand()%(N-j);
tmp = a[i];
a[i] = a[t];
a[t] =tmp;
}

shijiemoxing 2011-07-19
  • 打赏
  • 举报
回复
mark
金刚葫芦娃 2011-07-19
  • 打赏
  • 举报
回复
很简单的问题,for循环比较, 产生随机数的函数int n = rand() % 16 (16表示产生的随机数是0-15);

TitanQuest 2011-07-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luciferisnotsatan 的回复:]

建个数组,保存已获得的,遇到重复的,重新抽。
[/Quote]
++
xuxinmmy 2011-07-19
  • 打赏
  • 举报
回复
你想人工干预,使它不重复,那它就失去了随机数的意义,就不是随机数了
紫回蓝 2011-07-19
  • 打赏
  • 举报
回复
http://blog.csdn.net/renjunjie20051758/article/details/1761134
上面是C语言产生随机数的链接。
当然如果是随机数就不会有重复不重复了
如果要不重复的,就在建个存储表,存储进去,每次查出新的,在表里查找,没有就添加表内,最后遍历表输出就可以了。具体形式安要求决定
luciferisnotsatan 2011-07-19
  • 打赏
  • 举报
回复
建个数组,保存已获得的,遇到重复的,重新抽。
daniel0999 2011-07-19
  • 打赏
  • 举报
回复
学习了
  • 打赏
  • 举报
回复
C语言标准库有自带的rand()函数,具体用法,百度 “rand”

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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