為什么這里不能產生隨機數01?
發表于:2007-05-26來源:作者:點擊數:
標簽:
#include stdio.h #include stdlib.h int main( void ) { int num,i; scanf(%d,num); if( num%16 !=0) num -= num%16; srand(2); for( i = 0; i num ; i++ ) { printf( %d, rand() ); if( i%16 ==0) printf(,); if( i%(16*5) == 0) printf(\n); } printf(\n)
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
int num,i;
scanf("%d",&num);
if( num%16 !=0) num -= num%16;
srand(2);
for( i = 0; i <num ; i++ ) {
printf( "%d", rand() );
if( i%16 ==0) printf(",");
if( i%(16*5) == 0) printf("\n");
}
printf("\n");
return EXIT_SU
CCESS;
}
# ./a.out
23
1505335290,
173876671919068678826087457574798306190615649815028208641425592771261608745138075962721273043426350501795826911491495850932039335037820715049
#
請幫忙??!
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之間的隨機數
把這一句改成srand(time(0));
但我看不懂,我是想仿造這個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,........??
devel :這樣就行了:
srand(2);
j=rand(time(0));
printf("%d",j);
原文轉自:http://www.kjueaiud.com
- 評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
-