请问如何在TC中实现真正的随机数?

zoehugh 2004-05-07 10:01:30
请问如何在TC中实现真正的随机数?
假如我现在要不断出现1——17的随机整数,且每一次运行都要不一样。






不好意思没有分!
...全文
110 14 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
whalefish2001 2004-05-09
实际上,不可能产生真正的随机数,
大自然到是一个真正的随机数发生器,但是我们暂时还不会用来转换到计算机语言上去。

  • 打赏
  • 举报
回复
只有伪随机数,如果种子不同,产生的数也不同
  • 打赏
  • 举报
回复
ShadowCpp 2004-05-09
很难实现真正的随机数。
详细情况请参看Knuth的《计算机程序设计艺术》第二卷 半数值算法

一般这样都足够用了

srand( time( NULL ) );
temp = rand() % ( n + 1 );
/* n是你想要得到一个范围的数字,最好不要超过32767。根据编译器和各种环境,n的取值不定 */
  • 打赏
  • 举报
回复
RookieStar 2004-05-08
真正的随机数?
/////////////
不行吧,只能伪随机,概率分布上接近“随机”这个本质。
  • 打赏
  • 举报
回复
seabreeze9802 2004-05-08
汗,原来只是问怎么求一个范围内的随机数...
  • 打赏
  • 举报
回复
fire314159 2004-05-08
rand函数里的公式有人能告诉我是按什么分布的吗?
<the C programming language> page46
……
next=next*1103515245+12345;
return(unsigned int)(next/65536)%32768;
……
  • 打赏
  • 举报
回复
cecil105 2004-05-08
你可能借用时间函数啊!
  • 打赏
  • 举报
回复
zhangfjj 2004-05-08
我还以为是不重复的随机数呢?
^_^
  • 打赏
  • 举报
回复
julyclyde 2004-05-08
好像即使有硬件支持也不能吧?
不太了解那些硬件rand generator是怎么做的
  • 打赏
  • 举报
回复
代码之诗 2004-05-07
就完了吗?晕。

不服啊,还以为楼主真的是要真正的随机数……

真正的随机数对于 PC 机来说是做不到的,更别说 C 语言本身,没有硬件的支持,真正的物理随机是不可能的,到目前为止,在各种语言中自带库中的随机函数实现的都是伪随机,通常满足平均分布。
  • 打赏
  • 举报
回复
zoehugh 2004-05-07
多谢以上两位大虾。看到rand()%17可以产生0到16的随机数,顿时茅塞顿开。自己竟然忘了求模的方法。
这是我自己想要的,现在想到了,谢谢!!!
#include"stdio.h"
#include"time.h"
#include"stdlib.h"
main()
{
int a,i;
srand((unsigned)time(NULL));
for(i=0;i<17;i++)
{
a=rand()%17;
printf("%d ",a+1);
}
printf("\n");
}
  • 打赏
  • 举报
回复
zhangfjj 2004-05-07
假如我现在要不断出现1——17的随机整数,且每一次运行都要不一样。
----------------
楼上的只是生成了真正的随机数,但楼主要求每次运行都要不一样!
-----------
有一个笨办法,你每生成一个数,保存起来,后面再生成的,与前面的做比较,相同的话,重新生成,不相同的话,保存起来再重复!
  • 打赏
  • 举报
回复
bigbigwind 2004-05-07
函数randomize()  初始化随机数发生器
调用格式:
  #include <stdlib.h>
#include <time.h>
void randomize(void);
说明:
  randomize用一个随机值对随机数发生器进行初始化。由于randomize是作为宏来实现的,该宏调用了原型在time.h中的time函数,因此在使用此函数时,应使用#include <time.h>
返回值:
此函数无返回值

函数random()  随机数发生器
调用格式:
  #include <stdlib.h>
int random (int num);
说明:
  random(num)是一个在stdlib.h中定义的宏。Random返回一个0到(num-1)的随机数。num和返回的随机数均为整数。
返回值:
 Random返回一个0到(num-1)的随机数。

#include <stdlib.h>
#include <time.h>main()
{
int a[100],i;
randomize();
for(i=0;i<=99;i++)
a[i]=random(10000);
for(i=0;i<=99;i++)
printf("%d\t",a[i]);
printf("\n\n");
}
自己看吧
应该能看懂
虽然多了点
  • 打赏
  • 举报
回复
bigbigwind 2004-05-07

#include<stdlib.h>
#include<stdio.h>
void main()
{ int i;
randomize();
for(i=0;i<=100;i++)
{printf("%d\n",rand()%17+1);
}
}
这是1到17的随机数
randomize();用系统函数做种子
数名: random
功 能: 随机数发生器
用 法: int random(int num);
程序例:

#include
#include
#include

/* prints a random number in the range 0 to 99 */
int main(void)
{
randomize();
printf("Random number in the 0-99 range: %d\n", random (100));
return 0;
}



函数名: randomize
功 能: 初始化随机数发生器
用 法: void randomize(void);
程序例:

#include
#include
#include

int main(void)
{
int i;

randomize();
printf("Ten random numbers from 0 to 99\n\n");
for(i=0; i<10; i++)
printf("%d\n", rand() % 100);
return 0;
}

  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.6w+

社区成员

C语言相关问题讨论
社区管理员
  • C语言
  • 小灸舞
申请成为版主
帖子事件
创建了帖子
2004-05-07 10:01
社区公告
暂无公告