sasa_mj吧 关注:88贴子:7,282
我有一道题,说是概率问题,其实是个编程问题。碰到编程问题。我就完全不会了。特来求教
这是一个赌博游戏,掷骰子。6面的,如果赌金是1元。投到2个数字一样的,赚2元,带本金就是3元。3个数字一样的,就赚3元。没一样的。就损失赌金。
现在1000个人赌,起始金额是10元。一人赌最多50次 (钱输光的就不用赌了),每次赌金是手上钱的10%,最少是1元。
1)求最后1000个人,各手上是多少钱。2)最后1000个人,各玩了几把
这个是编程问题。我毫无办法。。。。弟弟可有良策?紧急求助啊


1楼2012-11-30 13:40回复
    叫哥
    另外扔几个骰子啊


    IP属地:日本2楼2012-12-01 22:09
    收起回复


      c)是在a上做的。不是b。。。麻烦你了。谢谢


      3楼2012-12-02 02:36
      回复
        我怎么理解跟你完全不一样……
        按你1楼的说法这样算没问题
        但我感觉题目的意思是,给一个预设的数字假设是A,3个骰子,投出1个A,2个A和3个A,收益与投入比分别为1:1,2:1,3:1
        按照这样来看,概率应该是这样
        损失1:125/216
        赚1:75/216
        赚2:15/216
        赚3:1/216
        (-125+75*1+15*2+1*3)/216 = -17/216
        1块钱玩到最后变成199/216块钱


        IP属地:日本4楼2012-12-02 16:49
        回复
          b这个方案最后是(-125+75+3*15+5)/216=0
          不赚不赔


          IP属地:日本5楼2012-12-02 16:51
          回复
            程序和结果都出来了,是按照我这个思路的。
            是matlab的,结果怎么呈现呢


            IP属地:日本6楼2012-12-02 17:24
            回复
              function p=Payoff(in)
              p0=125/216; %1块钱变0块钱
              p1=75/216; %1块钱变2块钱
              p2=15/216; %1块钱变3块钱
              %1块钱变4块钱概率是剩下的概率1/216
              rn=rand();%产生随机数
              if rn<=p0
              p=0;
              elseif rn<=p0+p1
              p=in*2;
              elseif rn<=p0+p1+p2
              p=in*3;
              else
              p=in*4;
              end
              function A=DiceTest(~)
              money=zeros(1,1000); %初始化数组,剩余金钱
              out=zeros(1,1000); %出局轮数
              for i=1:1000
              money(i)=10; %每个人10块钱
              end
              for k=1:50 %50轮
              for i=1:1000
              if money(i)>0
              m = min(money(i),max(money(i)*0.1,1));
              money(i)=money(i)-m+Payoff(m);
              if money(i)<=0 %记录破产的轮数
              out(i)=k;
              end
              end
              end
              end
              A=[money;out];
              c=0; %后面的都没什么用,只是顺便统计下还剩多少人,每个人平均剩多少钱
              avg=0;
              for i=1:1000
              if money(i)>0
              c=c+1;
              avg=avg+money(i);
              end
              end
              avg=avg/1000;
              %把function后面的A改成[c,avg]可以得到剩余人数和平均钱


              IP属地:日本7楼2012-12-02 17:36
              回复
                格式被度娘吃了,txt在这里
                你改成你需要的程序语言吧,我这个是matlab的
                http://pan.baidu.com/share/link?shareid=147096&uk=100769804


                IP属地:日本8楼2012-12-02 17:40
                收起回复
                  1。手上总金额大于10元,赌金为10%手上金额,意思可以不是整数。1元1,这种样子。
                  2。小于10元,大于1元时,赌金为1元。小于1元时,全压。
                  3。那个1:3,1:2,是赌金为2元时,就赢6元,赢4元。所以是3×赌金,不是3+赌金
                  4。有些人一直输,赌不到50次的。
                  这些你都考虑到了吗,如果考虑到了。就没问题了。
                  还有。问下。因为是用random做的。是不是每次run的答案,其实是不同的。对吗?


                  9楼2012-12-03 03:27
                  回复
                    还有Matlab里怎么用你那个txt啊。。。。 =。=


                    10楼2012-12-03 03:33
                    回复
                      我在matlab里,打开txt,然后在命令窗口里打
                      >> A=DiceTest()???
                      Undefined function or variable 'DiceTest'.


                      11楼2012-12-03 03:50
                      回复
                        你那个理解没有1:1,只有2:1和3:1啊。matching a number,匹配某一个数,show up once ,twice, three times,我觉得我的理解没问题啊
                        你说的都考虑到了,程序的注释里都写了
                        m = min(money(i),max(money(i)*0.1,1));
                        钱的10%和1取大的那个,再跟钱总数取小的那个
                        out数组记录了淘汰轮数,money<0就不玩下去了
                        这个东西很简单的
                        在matlab里新建两个m文件,分别把两个function贴进去
                        再在主测试页里打A=DiceTest()
                        就会显示A矩阵
                        Undefined function or variable 'DiceTest'.是说'DiceTest'函数未定义,因为你没有建立DiceTest的m文件,按照我上面写的做就行了


                        IP属地:日本12楼2012-12-03 19:38
                        收起回复
                          弟弟。问了第3个美国人了。估计得按我1楼的思路去做。。。。 =。=


                          13楼2012-12-04 10:24
                          回复
                            我们中国人思想太复杂了。美国人,貌似没告诉你设想一个数字。他们就不会认为需要这么做。。。呵呵


                            14楼2012-12-04 10:25
                            回复
                              两个function各建立一个m文件
                              他们真的是美国人么,我觉得题目意思很清楚啊
                              算了就按照你那个理解,我去写程序,也就是5分钟的事情……


                              IP属地:日本15楼2012-12-04 19:18
                              回复