| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1202 人关注过本帖
标题:概率这东西 能控制吗
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用TAAAAB在2015-6-2 15:29:22的发言:

既然是随机,那会不会就算一千次一万都都不会产生

如果真是这样,那就舍弃随机产生的6 6 6 6 6 6(就算真的随机生成了也不要)
人为有在100次内随机产生1到2次6 6 6 6 6 6



对 我认为可能运行10000次 也未必能出一次6个6   所以想控制

DO IT YOURSELF !
2015-06-02 15:48
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
回复 10楼 wp231957
没办法,这只是个想法,程序当遇到n个100次里出现6 6 6 6 6 6停止循环
也就是说你想要的这个特殊100次里只出现一组6 6 6 6 6 6概率很低
当然不排除下次你一运行1个100次就找到了
就是这样了,不知道说的对不对。

剑栈风樯各苦辛,别时冰雪到时春
2015-06-02 15:58
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main()
{
    srand((unsigned)time(NULL));
    int bs[6]={0,0,0,0,0,0};
    int j;
    for(int k=0;k<20;k++)
    {
        for(j=0;;j++)  
        {
            for(int i=0;i<6;i++) bs[i]=rand()%6+1;
            if(bs[0]==6 && bs[1]==6 && bs[2]==6 && bs[3]==6 && bs[4]==6 && bs[5]==6 ) break;
        }
        printf("累死我了,计算到%10d次 才遇到一次机遇\n",j);
    }
    return 0;
}
/*
累死我了,计算到     45861次 才遇到一次机遇
累死我了,计算到     72988次 才遇到一次机遇
累死我了,计算到     33970次 才遇到一次机遇
累死我了,计算到    107702次 才遇到一次机遇
累死我了,计算到     26771次 才遇到一次机遇
累死我了,计算到      3443次 才遇到一次机遇
累死我了,计算到     59348次 才遇到一次机遇
累死我了,计算到    121347次 才遇到一次机遇
累死我了,计算到     13441次 才遇到一次机遇
累死我了,计算到      4628次 才遇到一次机遇
累死我了,计算到     28043次 才遇到一次机遇
累死我了,计算到     32067次 才遇到一次机遇
累死我了,计算到     14955次 才遇到一次机遇
累死我了,计算到     26271次 才遇到一次机遇
累死我了,计算到      4747次 才遇到一次机遇
累死我了,计算到      8813次 才遇到一次机遇
累死我了,计算到      6939次 才遇到一次机遇
累死我了,计算到     13409次 才遇到一次机遇
累死我了,计算到     47694次 才遇到一次机遇
累死我了,计算到     27065次 才遇到一次机遇
*/

DO IT YOURSELF !
2015-06-02 15:58
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:17 
楼主为什么想控制在一百次以内,而不是十次以内?能控制还叫做随机?
产生六个六,概率是(1/6)^6。每产生一个6都是独立事件,已发生的对后来的没有任何影响。次数的期望就是1/((1/6)^6)
如果13楼代码k不是20,而是趋于无穷。次数均值就接近期望了
...
若p=(1/6)^6。10次内有且仅有一次出现6个6的概率是10*((1/6)^6)*(1-(1/6)^6)^9,好象是0.000214。
如果问题是:要求n次中有且仅有一次全6。那就在1到n中产生一随机数i。让i次为全6,其它随机产生,但不能是全6。

[ 本帖最后由 lianyicq 于 2015-6-2 19:44 编辑 ]

大开眼界
2015-06-02 16:43
lowrie
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:81
专家分:138
注 册:2015-3-12
收藏
得分:17 
概率就是随机的,他只是表示发生这件事的机会有多大,但也可能一次也不发生,所以是不受控制的。
楼主要找6 6 6 6 6 6出现的次数就是在求出现的概率,第一个是6的概率是1/6,连续出现6次的概率是1/(6*6*6*6*6*6)。
也就是平均46656次出现一次,但却不能保证在这46656次里边一定会出现。因此不受控制。
2015-06-02 17:25
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:17 
可以增加6出现的概率,但还是不能避免没有一次6个6,只是出现概率变大而已。

程序代码:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main()
{
    srand((unsigned)time(NULL));
    int bs[6] = {0,0,0,0,0,0};
    int i, j, temp, flag = 0, count = 0;
    for(i = 0;i < 100; i++)  
    {    
        for(j = 0; j < 6; j++)
        {
            temp = rand() % 10;
            bs[j] = (temp >= 6 ? 6 : temp + 1);     
            flag += bs[j];
        }
        if(flag==36&&count==2)
        {
            i--;
            continue;    
        }
        if(flag == 36)
        {
               printf("$$$$$$");
               count++;
        }
        flag = 0;
        printf("%2d%2d%2d%2d%2d%2d\n",bs[0],bs[1],bs[2],bs[3],bs[4],bs[5]);
    }
    printf("\n一共有%d组6个6.\n", count);
    return 0;
}


[ 本帖最后由 我爱吃青菜 于 2015-6-2 17:59 编辑 ]
2015-06-02 17:53
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用lianyicq在2015-6-2 16:43:33的发言:


如果问题是:要求n次中有且仅有一次全6。那就在1到n中产生一随机数i。让i次为全6,其它随机产生,但不能是全6。



这个思路挺好

DO IT YOURSELF !
2015-06-03 08:01
快速回复:概率这东西 能控制吗
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016934 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved