一个老虎在一天中午吃饭,每个肉3斤左右,一天也就能吃30斤肉左右,但这有2个饲养员 
饲养员A的情况是:1块肉有30%的概率会多加了3斤.
饲养员B的情况是:1块肉有25%的概率也会多加3了斤,有5%的概率呢会多给一块肉(而且这块肉呢还可能是多加了3斤的肉)

解决方案 »

  1.   

    这个题目满有意思,我来试试:
            int sumA = 0;
            for(int ix = 0; ix < 10; ++ix)
            {
                double r = Math.random();
                if(r < 0.3)
                {
                    sumA += 6;
                }
                else
                {
                    sumA +=3;
                }
            }
            System.out.println(sumA);
            
            int sumB = 0;
            boolean oneMore = false;
            for(int ix = 0; ix < 10; ++ix)
            {
                double r = Math.random();
                if(r < 0.05 && !oneMore)
                {
                    oneMore = true;
                    --ix;
                    r = Math.random();
                }
                if(r < 0.25)
                {
                    sumB += 6;
                }
                else
                {
                    sumB += 3;
                }
            }
            System.out.println(sumB);
      

  2.   

    呵呵 首先谢谢回贴 我研究了下你的程序,有2个疑问
    第1:当B饲养员有5%的概率多给1块肉的时候,这个在程序里只能进入一次
         if(r < 0.05 && !oneMore) 因为需要oneMore来进入循环,而oneMore被赋予true的时候  就再也进入不了判断了,100块肉可能有5块左右有这样的概率,而这个程序只能算一次。
    第2:首先,--ix;这个程序我看了也很受启发是个很好的技巧,^_^,好好学了下,但我看这种情况你可能没有想过,你让程序多循环了下,但对于这个例子会出现隐藏问题,假设你多出那次又刚好在0。05循环内会出现什么情况,也就是说0。05概率多出了>=2块肉,这跟题目是不符合,多给一块肉后是不会再这块肉的情况多给肉的,因为0。05概率比较低,所以不会出现这种情况,但这个概率越大出现的问题也就越大。
    呵呵  我也不知道我说的对不对 望回复下哈
      

  3.   

    对于A饲养员,没有什么好说,比较简单。
    对于饲养员B,我觉得其实你这个题目也没有讲的十分清楚。我是在认为B绝对不会出现一次多给两块肉的情况而留下oneMore这个变量的。这个变量的作用就是为了防止这种情况,即如果已经多给了一块肉,那么oneMore为true,以后不管循环多少次,都不会再多给肉(也就是不会再进--ix这段代码了),即使出现了小于0.05的概率。
    如果抛开我之前的那个假设,把oneMore相关的代码删除即可。而且我认为这样更加合理,只是我认为这不是你的原意,所以才冒昧假设。
      

  4.   

    我觉得应该是这样吧,饲养员B的我觉得改成这样会比较合理
    int sumB = 0;
            for (int i = 0; i < 10; i++) {
                double r = Math.random();
                double oneMore = Math.random();
                if (r < 0.25) {
                    if (oneMore < 0.05)
                        sumB = sumB + 12;
                    else
                        sumB = sumB + 6;
                } else {
                    if (oneMore < 0.05)
                        sumB = sumB + 6;
                    else
                        sumB = sumB + 3;
                }
            }
            System.out.println("sumB="+sumB);