我正在使用random()函数,我想知道是否有一个原因,我总是得到8-10位数字。我只是想确保我的程序没有问题。感谢。
这是功能:
void random_array(int* p, int size) {
/*seed random number generator */
srandom(time(NULL));
int i;
for(i = 0; i < size; i++)
*(p+i) = random();
}
答案 0 :(得分:4)
嗯,从数学角度来说,获得大数字的机会远远超过(相对)小数字的机会。例如,如果你选择一个带有(1-4)位数的随机数,那么它在范围(0-99)内的几率只有1%。
话虽如此,如果你想要更小的数字,你可以随机模数取一定的数字:
a = random() % 100; // this will give you a random number from 0 to 99
b = 10 + random() % 15; // random number from 10 to 24
答案 1 :(得分:3)
8-10位数字的数字:10,000,000,000 - 100,000,000 = 9,900,000,000(99亿)
0-7位数字的数量:10,000,000(1000万)
换句话说,每1 0-7位数字有990个8-10位数字。因此,对于每990个8-10位数字,您可以获得大约1 0-7位数字。
简单地说,它是因为它们中有更多。
答案 2 :(得分:0)
您期望从random()
收到多少个数字?
如果要限制生成数字的大小,只需使用模数运算符将结果限制为余数(在下面的示例中为0到999之间的数字):
*(p+i) = random() % 1000;
答案 3 :(得分:0)
从数学的角度来看,很可能是因为大数字......不仅仅是小数字,所以是的。它更有可能获得这样的数字。
要生成自定义间隔随机数,请使用
之类的内容#include <stdlib.h>
#include <stdio.h>
// Generate random numbers in the min-max interval
void random_array(int* p, int size, int min, int max) {
/*seed random number generator */
srandom(time(NULL));
int i;
for(i = 0; i < size; i++)
*(p+i) = (random() % max) + min;
}
int main(void) {
int array[3];
random_array(array, 3, 0, 12);
printf("%d\n", array[0]);
printf("%d\n", array[1]);
printf("%d\n", array[2]);
return 0;
}