LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 910|回复: 5

为什么这里不能产生随机数01?

[复制链接]
发表于 2004-1-16 15:17:30 | 显示全部楼层 |阅读模式
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main( void )
  4.   {
  5.     int num,i;
  6.     scanf("%d",&num);
  7.     if( num%16 !=0) num -= num%16;
  8.     srand(2);
  9.     for( i = 0; i <num ; i++ ) {
  10.       printf( "%d", rand() );
  11.       if( i%16 ==0)         printf(",");
  12.       if( i%(16*5) == 0)    printf("\n");
  13.     }
  14.     printf("\n");
  15.     return EXIT_SUCCESS;
  16.   }
复制代码

# ./a.out
23
1505335290,
173876671919068678826087457574798306190615649815028208641425592771261608745138075962721273043426350501795826911491495850932039335037820715049
#
请帮忙!!
:help
发表于 2004-1-16 15:41:13 | 显示全部楼层

回复: 为什么这里不能产生随机数01?

srand()是用来初始化随机种子数的,因为rand的内部实现是用线性同余法
做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围
里可看成是随机的,式子如下 rand = rand*const_1 + c_var; srand函数
就是给它的第一个rand值。用int x = rand() % 100; 来生成 0 到 100 之
间的随机数这种方法是不或取的,比较好的做法是:
j=(int)(n*rand()/(RAND_MAX+1.0))  // 产生一个0到n之间的随机数
发表于 2004-1-16 16:33:44 | 显示全部楼层
把这一句改成srand(time(0));
 楼主| 发表于 2004-1-16 16:49:47 | 显示全部楼层
但我看不懂,我是想仿造这个perl程序写个C版本的。
#!/usr/bin/perl -w
chomp($IN=<>);
$IN -= $IN%16 if($IN%16 !=0);
srand;
for($count=1;$count< $IN; $count++) {
$a=int(rand(2));
print $a ;
print "\," if( $count%16 == 0 );
print "\n" if($count%(16*5) == 0 );
}
print "\n";
# perl one_zero
36
1100011110101101,001100100110101

并不是要取的rand()%10,........??
发表于 2004-1-16 17:08:05 | 显示全部楼层
 楼主| 发表于 2004-1-16 20:05:29 | 显示全部楼层
:thank
这样就行了:
srand(2);
j=rand(time(0));
printf("%d",j);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表