原题是这样的:1. n个金币放入m个盒子,你去打开其中一个盒子,发现有k个金币。
1. 拿走此盒子
2. 不要此盒子,再打开一个盒子
问题:给出n,m,k,给出最好的选择。
我的理解:n-k个金币放入m-1个盒子,写一个方法可以产生有m-1个元素且其和为n-k的数组的方法,我自己也写了一个,但不知道对不对,求大神给看下
//先这样产生一个数组
public static int[] ProduceArray(int m,int n,int k) {
int[] boxmoney=new int[m];
boxmoney[0]=k;
Random random = new Random();
n=n-k;
int i=0;
for(i=1;i if(n>0)
boxmoney[i]=random.nextInt(n+1)+0;
else
boxmoney[i]=0;
n=n-boxmoney[i];
}
if(n>0)
boxmoney[m-1]=n;
else
boxmoney[m-1]=0;
return boxmoney;
}
//把从第二个开始的元素随机打乱
public static void changePosition(int[] boxmoney) {
Random random = new Random();
for(int index=1; index<boxmoney.length; index++) {
//从1到index处之间随机取一个值,跟index处的元素交换
int p1=random.nextInt(boxmoney.length-index)+index;
int p2=index;
int temp = boxmoney[p1];
boxmoney[p1] = boxmoney[p2];
boxmoney[p2] = temp;
}
}