用rand( )的奇怪现象
用rand()输出10个随机数(这10个随机数的范围在1-10之间)代码如下:
#include<iostream>
using namespace std;
#include<time.h>
int main()
{
int i;
srand((unsigned)time(NULL));
for(i=0;i<10;i++)
{
cout<<1+(int)(10.0*rand()/(RAND_MAX+1.0))<<" ";
}
cout<<endl;
return 0;
}
我连续运行几次结果如下:
9 5 2 9 1 10 10 1 6 10
Press any key to continue
9 2 3 4 7 3 1 9 6 6
Press any key to continue
9 2 10 6 7 6 4 7 1 1
Press any key to continue
--------------------------------------------------------------------------------------------------------------------------
我发现在产生的第一个数都是一样的,于是对代码做如下改动:
将原来的“cout<<1+(int)(10.0*rand()/(RAND_MAX+1.0))<<" "; ”
改为“cout<<1+(int)(10.0*rand()/(RAND_MAX+1.0))<<" "<<rand()<<" ";”
连继几次运行结果如下;
8 30867 3 15363 4 25193 1 4540 9 9588 6 10727 9 11060 6 15548 1 1345 1 15649
Press any key to continue
2 30850 6 24346 8 6389 6 21745 8 25334 6 11466 4 31438 9 2891 3 31095 5 6495
Press any key to continue
5 30834 9 561 2 20352 10 6183 8 8312 6 12206 8 19048 3 23003 4 28077 9 30109
Press any key to continue
这回第一个数不同了,但是根据后面的随机数并按“1+(int)(10.0*rand()/(RAND_MAX+1.0))”计算的话,前面的1-10之间的数并不正确
---------------------------------------------------------------------------------------------------------------------------
再做实验,代码如下:
#include<iostream>
using namespace std;
#include<time.h>
int main()
{
int i;
srand((unsigned)time(NULL));
for(i=0;i<10;i++)
{
cout<<1+(int)(10.0*rand()/(RAND_MAX+1.0))<<" ";
}
cout<<endl;
for(i=0;i<10;i++)
{
cout<<1+(int)(10.0*rand()/(RAND_MAX+1.0))<<" "<<rand()<<" ";
}
cout<<endl;
return 0;
}
连续几次运行结果如下:
1 5 1 7 5 9 9 7 8 2
6 30130 1 14232 10 26183 6 31074 1 21586 8 14874 9 3277 9 7596 8 15158 4 21679
Press any key to continue
1 1 4 2 8 10 5 1 3 10
6 27615 7 30144 10 10234 2 28228 4 19940 8 12329 5 29153 6 26471 3 16956 10 27719
Press any key to continue
1 4 9 9 1 1 6 1 9 8
6 27467 2 19515 6 32426 7 22278 1 21771 3 23745 7 11400 9 8306 8 5496 6 4944
Press any key to continue
1 10 10 4 8 3 8 9 9 5
6 27172 2 31025 6 11274 8 10378 5 25432 3 13808 2 8661 6 4744 8 15345 9 24930
Press any key to continue
这回第一个数又相同了
请高手帮忙解释下