关于按照一定概率产生随机数的问题:
计算机产生的随机数是一种均匀分布的随机数,比如用c语言产生0~9的随机数,那么每个随机数产生的频率大约都是0.1,比如
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
int main()
{
    int i;
    srand((unsigned)time(NULL));
    int x;
    int num[10];
    for(i=0;i<10;i++)
        num[i]=0;
    for(i=0;i<10000;i++)
    {
        x= rand()%10;
        switch(x)
        {
            case 0:
                num[0]+=1;
                break;
            case 1:
                num[1]+=1;
                break;
            case 2:
                num[2]+=1;
                break;
            case 3:
                num[3]+=1;
                break;
            case 4:
                num[4]+=1;
                break;
            case 5:
                num[5]+=1;
                break;
            case 6:
                num[6]+=1;
                break;
            case 7:
                num[7]+=1;
                break;
            case 8:
                num[8]+=1;
                break;
            case 9:
                num[9]+=1;
                break;
        }
    }
    for(i=0;i<10;i++)
    {
        printf("%d 概率 %f\n",i,num[i]/10000.0);
    }
}
那么输出结果每次略有不同,但大都在0.1浮动
现在,我想产生71~100的随机数,其中71~80的概率为0.2,81~90概率为0.6,91~100的概率为0.2。
那么,我依旧从0~9开始先产生概率,再产生随机数
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
int main()
{
    srand((unsigned)time(NULL));
    int i;
    int x;
    int num[3];
    for(i=0;i<3;i++)
        num[i]=0;
matlab中printf输出格式    for(i=0;i<10000;i++)
    {
        x=rand()%10;
        switch(x)
        {
            case 0:
            case 1:
                printf("%d\n",rand()%10+71);
                num[0]+=1;
                break;
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
                printf("%d\n",rand()%10+81);
                //rand()%10+81;
                num[1]+=1;
                break;
            case 8:
            case 9:
                printf("%d\n",rand()%10+91);
                //rand()%10+91;
                num[2]+=1;
                break;
        }
       
    }
    for(i=0;i<3;i++)
        printf("随机数%f\n",num[i]/10000.0);
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。