c++ rand函数测试,出乎我的意料,我的测试代码有问题吗?
本帖最后由 yxylwt 于 2013-04-04 18:58:45 编辑
const int NCOINS = 10;
const long NTOSSES = 50000L;
srand(unsigned(time(0)));
long i, heads[NCOINS];
int j;
// 初始化数组heads
for(j = 0; j < NCOINS; ++j)
heads[j] = 0;
int rd=0;
// 重复50,000次模拟事件
for(i = 0; i < NTOSSES; ++i)
{
for(j = 0; j < NCOINS; ++j)
{
rd=rand()%10;
if (rd==j)
{
heads[j]++;
break;
}
}
}
// 输出频率图
for(i = 0; i < NCOINS; ++i)
{
cout << i << ":"<< heads[i]<<endl ;
}
return 0;
#include <stdio.h>如果你的代码是这样
#include <stdlib.h>
int main(int argc, char *argv[])
{
int arr[10] = {0};
for(int i=0; i<500000; ++i)
++arr[rand()%10];
for(int i=0; i<10; ++i)
printf("%d : %d\n", i, arr[i]);
return 0;
}
[root@down c]# ./main
0:5054
1:5075
2:4946
3:4923
4:5133
5:4921
6:5091
7:4911
8:4953
9:4993
[root@down c]# cat main.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *const argv[])
{
int i;
int h[10] = {0};
for (i = 0; i < 50000; ++i) {
int rd = rand() % 10;
h[rd]++;
}
for (i = 0; i < 10; ++i) {
printf("%d:%d\n", i, h[i]);
}
return 0;
}