【发布时间】:2013-08-27 19:17:41
【问题描述】:
此代码用于以一定概率获取随机数:
如果r 介于 0 和 0.8 之间,则返回 8;如果r 介于 0.8 和 1 之间,则返回 2。
#include<stdio.h>
#include<pthread.h>
#include<stdlib.h>
int main()
{
srand(time(NULL));
double r = rand() / (double)RAND_MAX;
double sum = 8 + 2;
if (r < 8 / sum) {
printf("80% \n");
} else {
printf("20% \n");
}
}
但是如果我有两个以上的数字,比如 n,我该如何处理呢?我可以用多个 if-else 语句来处理它吗?或者还有什么?
【问题讨论】:
-
只是感兴趣:为什么要分配 2 + 8?为什么不只有 10 个?
-
@Zaibis 为了让逻辑更清晰,也许更短并不总是更好
-
嗯,这取决于。如果你可以有很多这样的值,循环遍历一个数组可能是最好的,或者如果这些值是由某个公式确定的,那么只是一个带有值的循环。或者,如果它是一些固定值,您可以使用一系列 if/else。我真的不明白这个问题的意义。你希望发现什么?
-
您能否举一个您希望为您的 N 问题提供的输入(例如:[8,2])和输出(例如:[80%, 20%])的示例?您甚至不需要您给出的示例中的 if/else...
-
@Dave 我想根据权重将 rand 范围分配给多个选择,例如,如果我们有选择 :5,3,2,1 那么我想要 50% 到 5, 30% 到3, 20% 到 2, 10% 到 1
标签: c random random-sample