这是我的功能
int nepresnost_N2(int S){
int N2, N2_1, N2_2;
N2_1 = -S/10;
N2_2 = S/10;
N2 = rand() % (N2_2 + 1 - N2_1) + N2_1;
printf("%i", N2);
}
我不知道如何为(没有0)创造条件。 任何想法,谢谢:))
答案 0 :(得分:5)
如果您希望图纸在[a, b]
范围内,不包括零,则在[a, b - 1]
中生成一个随机数,如果返回的值为非负数,则为其添加1。
这将具有优于取样和拒绝0
值的统计特性。
答案 1 :(得分:5)
由于您的范围既有正面也有正面,从-s
到+s
,您可以将范围的正部分缩短1,然后在生成的值时加1是否定的:
N2_1 = -S/10;
N2_2 = S/10-1; // Shrink by one
N2 = rand() % (N2_2 + 1 - N2_1) + N2_1;
if (N2 >= 0) { // Correct for zero
N2++;
}
或者,您可以将结果检查为零,并在必要时生成新数字:
int nepresnostNoZero(int S) {
int res;
do {
res = nepresnost_N2(S);
} while (res == 0);
return res;
}