mxwawaawxm 发表于 2019-10-19 22:57

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:}

15774211127 发表于 2019-10-19 23:14

使用数组
数组里面是这几个数,对应哪些鬼吉:Dweeqw
如果你要0对应的多一点你就在数组里多加个0
然后随机0到数组长度
然后取出对应的值,就是结果?
上面的数组每个数的数量,可以使用比例计算出来,从而达到控制概率
打比方,两个数抽取1个数,每个数概率50%
现在将数组添加个0,变成,控制0的概率就变为66.6%了

BlackConsole 发表于 2019-10-19 23:17

最蠢的一种办法判断数字区间
随机1-100
1-30是大吉
31-35是中吉
35-60是小
这样就可以

白竹 发表于 2019-10-19 23:29

多生成几个随机数 比如 0到9 然后 概率大的 多给点随机数范围给他不就行了

TOUCH 发表于 2019-10-20 01:44

白竹 发表于 2019-10-19 23:29
多生成几个随机数 比如 0到9 然后 概率大的 多给点随机数范围给他不就行了

我也是这么想的

xiaosuobjsd 发表于 2019-10-20 08:02

本帖最后由 xiaosuobjsd 于 2019-10-20 08:04 编辑

可以对100求模,余数为0/1/2……/10的时候就是吉,算出来的概率大伟10/100,同理余数为11的时候为大凶,算出来的概率小为1/100
这样的好处是可以手动控制几率,有点某鹅的意思,估计抽奖家电之类的几率是几亿分之1吧

mxwawaawxm 发表于 2019-10-20 17:22

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]
查看完整版本: C语言如何控制rand函数生成的数字概率不均等