C语言如何控制rand函数生成的数字概率不均等
本帖最后由 mxwawaawxm 于 2019-10-24 13:54 编辑源于下面的题
第一道题,我能做
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
srand(time(NULL));
int random_num = rand()%7;
switch (random_num) {
case 0:
fprintf(stdout, "大吉\n");
break;
case 1:
fprintf(stdout, "中吉\n");
break;
case 2:
fprintf(stdout, "小吉\n");
break;
case 3:
fprintf(stdout, "吉\n");
break;
case 4:
fprintf(stdout, "末吉\n");
break;
case 5:
fprintf(stdout, "凶\n");
break;
case 6:
fprintf(stdout, "大凶\n");
break;
}
return 0;
}
但第2道题,要降低rand函数生成的数字概率不均等,这怎么写,请问各位大佬{:301_1007:} 使用数组
数组里面是这几个数,对应哪些鬼吉:Dweeqw
如果你要0对应的多一点你就在数组里多加个0
然后随机0到数组长度
然后取出对应的值,就是结果?
上面的数组每个数的数量,可以使用比例计算出来,从而达到控制概率
打比方,两个数抽取1个数,每个数概率50%
现在将数组添加个0,变成,控制0的概率就变为66.6%了
最蠢的一种办法判断数字区间
随机1-100
1-30是大吉
31-35是中吉
35-60是小
这样就可以 多生成几个随机数 比如 0到9 然后 概率大的 多给点随机数范围给他不就行了 白竹 发表于 2019-10-19 23:29
多生成几个随机数 比如 0到9 然后 概率大的 多给点随机数范围给他不就行了
我也是这么想的 本帖最后由 xiaosuobjsd 于 2019-10-20 08:04 编辑
可以对100求模,余数为0/1/2……/10的时候就是吉,算出来的概率大伟10/100,同理余数为11的时候为大凶,算出来的概率小为1/100
这样的好处是可以手动控制几率,有点某鹅的意思,估计抽奖家电之类的几率是几亿分之1吧 15774211127 发表于 2019-10-19 23:14
使用数组
数组里面是这几个数,对应哪些鬼吉
如果你要0对应的多一点你就在 ...
谢谢。有点明白你的意思
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
srand(time(NULL));
int array[] = {
0, 1, 2, 3, 4,
5, 6, 0, 1, 2,
0, 1, 2,
};
int random_num = rand()%14;
fprintf(stdout, "array[%d] = %d\n", random_num, array);
switch (array) {
case 0:
fprintf(stdout, "大吉\n");
break;
case 1:
fprintf(stdout, "中吉\n");
break;
case 2:
fprintf(stdout, "小吉\n");
break;
case 3:
fprintf(stdout, "吉\n");
break;
case 4:
fprintf(stdout, "末吉\n");
break;
case 5:
fprintf(stdout, "凶\n");
break;
case 6:
fprintf(stdout, "大凶\n");
break;
}
return 0;
}
页:
[1]