最近看到一个网站上有个游戏叫幸运28,看了一下挺好玩的.游戏的原则就是,有三位数.第一位,第二位,第三位都是从0-9的之中随机选一个数,然后三个数相加后得到一个数.你的目的就是猜中三位数相加后的数.
  我现在想的就是给你100000,如何分配这100000使得最后的收益最大.
  这几天我都想这个问题.但是由于算法很不合理.搞得处理机几秒钟处理一次数据.
  不过这28个数的概率是很轻松就得出来了,代码如下:
public class gailv {
public static void main(String args[]){
int count=0;
for(int m=0;m<28;m++){
  for(int i=0;i<=9;i++)
    for(int j=0;j<=9;j++)
for(int k=0;k<=9;k++)
    if(m==k+j+i){
count++;
}

System.out.println(m+"的个数是:"+count);
float gl= (float)count;
System.out.println(m+"的概率是:"+(gl/10)+"%");
count=0;}
}
}
求如何分配这10000,使得收益最大?期待答案.
ps:为了不误导大家我就不把收益的那段代码写上了.

解决方案 »

  1.   


            int[] counts = new int[28];
    int sum = 0;
    for (int i = 0; i <= 9; i++)
        for (int j = 0; j <= 9; j++)
    for (int k = 0; k <= 9; k++) {
        counts[i + j + k]++;
        sum++;
    }
    for (int i = 0; i < counts.length; i++) {
        System.out.println(i + "的个数是:" + counts[i]);
        System.out.println(i + "的概率是:" + (counts[i] * 100 / (float)sum ) + "%");
    }
      

  2.   

    万亿级别的复杂度,怎么优化呢final int MAX_VALUE = 10000;
    int[] counts = new int[3*MAX_VALUE+1];
    int sum = 0;
    for (int i = 0; i <= MAX_VALUE; i++)
        for (int j = 0; j <= MAX_VALUE; j++)
    for (int k = 0; k <= MAX_VALUE; k++) {
        counts[i + j + k]++;
        sum++;
    }
    for (int i = 0; i < counts.length; i++) {
        System.out.println(i + "的个数是:" + counts[i]);
        System.out.println(i + "的概率是:" + (counts[i] * 100 / (float)sum ) + "%");
    }
      

  3.   

    这只是得出概率比如 p[i]表示和为i的概率,m[i]表示押在i上的钱现在要求  sigma(p[i]*m[i])最大   约束条件  sigma(m[i]) == 10000不简单的背包啊
      

  4.   


    还有那个sum应该会溢出 10000太大了
      

  5.   

    lz说的是给你10000块钱吧 又没说给你10000个数而且lz你的公式 sigma(p[i]*m[i])最大 约束条件 sigma(m[i]) == 10000当然是哪个p[i]最大 就把10000全给它啊
      

  6.   

    (我本来说是用100000,最后备注的时候写成10000了。不过老是说10000本身还是挺大的。)我算收益的时候用了28个for循环,for 循环里又写了一个if 语句条件是 当几个数相加大于10000时,就用带标号的break 跳到上一级循环。但是,运行的时候没有什么进展。
    代码如下:
    用num[28]这个数组装这10000元。
    数组a[28]是这28个数的概率。
    mm1是最大收益。
    break用的不是很到位,应该是这个算法不是很的原因所在。
    for(num[0]=0;num[0]<=10000;num[0]++)
    outer1:
    for(num[1]=0;num[1]<=10000;num[1]++)
    {
    if(num[0]+num[1]>10000)
    {
    break outer1;}outer2:
    for(num[2]=0;num[2]<=10000;num[2]++)
    {
    if(num[0]+num[1]+num[2]>10000)
    {
    break outer2;}outer3:
    for(num[3]=0;num[3]<=10000;num[3]++)
    {
    if(num[0]+num[1]+num[2]+num[3]>10000)
    {
    break outer3;}outer4:
    for(num[4]=0;num[4]<=10000;num[4]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]>10000)
    {
    break outer4;}outer5:
    for(num[5]=0;num[5]<=10000;num[5]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]>10000)
    {
    break outer5;}outer6:
    for(num[6]=0;num[6]<=10000;num[6]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]>10000)
    {
    break outer6;}outer7:
    for(num[7]=0;num[7]<=10000;num[7]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]>10000)
    {
    break outer7;}outer8:
    for(num[8]=0;num[8]<=10000;num[8]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]>10000)
    {
    break outer8;}outer9:
    for(num[9]=0;num[9]<=10000;num[9]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]>10000)
    {
    break outer9;}outer10:
    for(num[10]=0;num[10]<=10000;num[10]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]>10000)
    {
    break outer10;}outer11:
    for(num[11]=0;num[11]<=10000;num[11]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]>10000)
    {
    break outer11;}outer12:
    for(num[12]=0;num[12]<=10000;num[12]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]>10000)
    {
    break outer12;}outer13:
    for(num[13]=0;num[13]<=10000;num[13]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]+num[13]>10000)
    {
    break outer13;}outer14:
    for(num[14]=0;num[14]<=10000;num[14]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]+num[13]+num[14]>10000)
    {
    break outer14;}outer15:
    for(num[15]=0;num[15]<=10000;num[15]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]+num[13]+num[14]+num[15]>10000)
    {
    break outer15;}
    outer16:
    for(num[16]=0;num[16]<=10000;num[16]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]+num[13]+num[14]+num[15]+
    num[16]>10000)
    {
    break outer16;}outer17:
    for(num[17]=0;num[17]<=10000;num[17]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]+num[13]+num[14]+num[15]+
    num[16]+num[17]>10000)
    {
    break outer17;}outer18:
    for(num[18]=0;num[18]<=10000;num[18]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]+num[13]+num[14]+num[15]+
    num[16]+num[17]+num[18]>10000)
    {
    break outer18;}outer19:
    for(num[19]=0;num[19]<=10000;num[19]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]+num[13]+num[14]+num[15]+
    num[16]+num[17]+num[18]+num[19]>10000)
    {
    break outer19;}outer20:
    for(num[20]=0;num[20]<=10000;num[20]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]+num[13]+num[14]+num[15]+
    num[16]+num[17]+num[18]+num[19]+num[20]>10000)
    {
    break outer20;}outer21:
    for(num[21]=0;num[21]<=10000;num[21]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]+num[13]+num[14]+num[15]+
    num[16]+num[17]+num[18]+num[19]+num[20]+
    num[21]>10000)
    {
    break outer21;}outer22:
    for(num[22]=0;num[22]<=10000;num[22]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]+num[13]+num[14]+num[15]+
    num[16]+num[17]+num[18]+num[19]+num[20]+
    num[21]+num[22]>10000)
    {
    break outer22;}outer23:
    for(num[23]=0;num[23]<=10000;num[23]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]+num[13]+num[14]+num[15]+
    num[16]+num[17]+num[18]+num[19]+num[20]+
    num[21]+num[22]+num[23]>10000)
    {
    break outer23;}outer24:
    for(num[24]=0;num[24]<=10000;num[24]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]+num[13]+num[14]+num[15]+
    num[16]+num[17]+num[18]+num[19]+num[20]+
    num[21]+num[22]+num[23]+num[24]>10000)
    {
    break outer24;}outer25:
    for(num[25]=0;num[25]<=10000;num[25]++)
    {if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]+num[13]+num[14]+num[15]+
    num[16]+num[17]+num[18]+num[19]+num[20]+
    num[21]+num[22]+num[23]+num[24]+num[25]>10000)
    {
    break outer25;}outer26:
    for(num[26]=0;num[26]<=10000;num[26]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]+num[13]+num[14]+num[15]+
    num[16]+num[17]+num[18]+num[19]+num[20]+
    num[21]+num[22]+num[23]+num[24]+num[25]+
    num[26]>10000)
    {
    break outer26;}
    outer27:
    for(num[27]=0;num[27]<=10000;num[27]++)
    {
    if(num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+
    num[6]+num[7]+num[8]+num[9]+num[10]+
    num[11]+num[12]+num[13]+num[14]+num[15]+
    num[16]+num[17]+num[18]+num[19]+num[20]+
    num[21]+num[22]+num[23]+num[24]+num[25]+
    num[26]+num[27]<=10000)
    {
    mm=a[0]*num[0]+a[1]*num[1]+a[2]*num[2]+a[3]*num[3]+a[4]*num[4]+
    a[5]*num[5]+a[6]*num[6]+a[7]*num[7]+a[8]*num[8]+a[9]*num[9]+
    a[10]*num[10]+a[11]*num[11]+a[12]*num[12]+a[13]*num[13]+a[14]*num[14]+
    a[15]*num[15]+a[16]*num[16]+a[17]*num[17]+a[18]*num[18]+a[19]*num[19]+
    a[20]*num[20]+a[21]*num[21]+a[22]*num[22]+a[23]*num[23]+a[24]*num[24]+
    a[25]*num[25]+a[26]*num[26]+a[27]*num[27];
    if(mm>mm1){
      mm1=mm;
    System.out.print("最大的金额是:"+mm1);
    for(int b=0;b<28;b++)
    System.out.print(" num["+b+"]="+num[b]);
    }}
    else{
    break outer27;}

    }//end 27
    }//end 26
    }//end 25
    }//end 24
    }//end 23
    }//end 22
    }//end 21
    }//20
    }//19
    }//18
    }//17
    }//16
    }//15
    }//14
    }//13
    }//12
    }//11
    }//10
    }//9
    }//8
    }//7
    }//6
    }//5
    }//4
    }//3
    }//2
    }//1
      

  7.   

    如果你只是提收益,或者说你能100%中奖,那么 肯10000*P[i]最大, 此时的p[i]应该是28个中最大那个