我已经尝试了,但它似乎没有给我想要的数字。到目前为止,这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i;
printf("Value of n:\n");
scanf("%d", &n);
int t[n];
for(i=0; i<n; i++)
printf("%d ", rand()%20+30);
return 0;
}
答案 0 :(得分:4)
printf("%d ", rand()%20+30);
生成30到50之间的随机数(不包括在内)。你需要
printf("%d ", rand()%10+20);
生成20到30之间(不包括在内)
10
是范围,20
是偏移。
包含两个端点(给出11个可能的值):
printf("%d ", rand()%11+20);
答案 1 :(得分:1)
这些是表达式
number = 21 + rand() % 9 // for (20, 30)
number = 20 + rand() % 11 // for [20, 30]
答案 2 :(得分:0)
尝试rand()%10+20
。
rand()%10
给出了0
和9
之间的数字。然后添加20
将在20
和29
之间给出数字。
对于20
和30
(含)之间的数字,请使用rand()%11+20
。
答案 3 :(得分:0)
要生成范围[A ... B]中的随机数,首先取数字之间的差异:D = BA,然后生成[0..D]范围内的随机数并将其添加到A:
unsigned myRand(unsigned fromA, unsigned toB)
{
if (fromA > toB) // check if fromA is
return myRand(toB, fromA);
int d = toB - fromA; // difference between numbers: D = B-A
int r = rand() % (d+1); // random number in the range of [0..D]
return r + fromA;
}
或者,你可以像这样手动:
20 + (rand()%11)
另请注意,根据实现rand(),返回0到RAND_MAX之间的值,因此您将无法创建大于RAND_MAX的随机值(可能小到32767)。在这种情况下,您可以组合多个rand()
调用以获取大型随机数:
unsigned r = (rand() << 16) | rand();