吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2091|回复: 6
收起左侧

[已解决] C语言如何控制rand函数生成的数字概率不均等

[复制链接]
mxwawaawxm 发表于 2019-10-19 22:57
本帖最后由 mxwawaawxm 于 2019-10-24 13:54 编辑

源于下面的题
2019-10-19_225525.png

第一道题,我能做
[C] 纯文本查看 复制代码
#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函数生成的数字概率不均等,这怎么写,请问各位大佬

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
mxwawaawxm + 1 + 1 谢谢@Thanks!

查看全部评分

BlackConsole 发表于 2019-10-19 23:17
最蠢的一种办法  判断数字区间
随机1-100
1-30是大吉
31-35是中吉
35-60是小  
这样就可以

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
mxwawaawxm + 1 + 1 谢谢@Thanks!
collapse + 1 我很赞同!感觉很聪明的方法啊

查看全部评分

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

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
mxwawaawxm + 1 + 1 谢谢@Thanks!

查看全部评分

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吧

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
mxwawaawxm + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| mxwawaawxm 发表于 2019-10-20 17:22
15774211127 发表于 2019-10-19 23:14
使用数组
数组里面是[0,1,2,3,4,5,6]这几个数,对应哪些鬼吉
如果你要0对应的多一点你就在 ...

谢谢。有点明白你的意思

[C] 纯文本查看 复制代码
#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[random_num]);
    
    switch (array[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;
}
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-30 09:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表