此代码用于以一定概率获取随机数:
如果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语句来处理它吗?还有什么?
答案 0 :(得分:3)
<强>简单强>
O(n)
时间O(n)
时间内遍历数组:
<强>复合强>
O(n)
时间(此数组应具有增加的值)>=
时间内找到O(log(n))
随机数的最小元素。我没有提供必要的角落案件来解决。我相信你可以自己做。
答案 1 :(得分:1)
除了randomstring的提议之外,您还可以考虑构建一个Alias Table - O(n log n)来构造表,每个值生成一个O(1)。