【发布时间】:2018-04-21 18:03:51
【问题描述】:
我想生成 n 个随机数,其总和应为 m,并且这些数应始终在 x 和 y 之间。
例如:- 如果我说我需要 20 个不,介于 3 和 9 之间,其总和应该是 100。
我想指定 no 的总和和所需数量,以及应该生成随机 no 的限制,它应该给我指定数量的随机 no。下面是我的代码,它生成的 no 大于 2,但我无法设置最大限制。此外,出来的总和和没有的总和。它生成的不等于指定的总和。我完全糊涂了请帮帮我。
TextView textView,randomTotaltxt;
int count0 = 0;
int count1 = 0;
int targetSum = 100;
int numberofDraws = 20;
textView = (TextView) findViewById(R.id.textview);
randomTotaltxt = (TextView) findViewById(R.id.randomTptalText);
Random r = new Random();
ArrayList<Integer> load = new ArrayList<>();
//random no
int sum = 0;
for (int i=0; i<numberofDraws;i++){
int next = r.nextInt(targetSum)+1;
Log.d("No",""+next);
load.add(next);
sum += next;
}
//scale it
double scale = 1d*targetSum/sum;
sum=0;
for (int i=0; i<numberofDraws;i++){
load.set(i, (int)(load.get(i)*scale));
sum += load.get(i);
}
while (load.contains(0)|| load.contains(1)){
for (int i=0; i<load.size();i++) {
if (load.get(i).equals(0)) {
load.set(i, load.get(i) + 2);
count0++;
sum = sum+1;
}
if (load.get(i).equals(1)) {
load.set(i, load.get(i) + 2);
sum += load.get(i);
count1++;
sum = sum+1;
}
}
}
// take rounding
while (sum++ <targetSum){
int i = r.nextInt(numberofDraws);
load.set(i, load.get(i) + 1);
}
textView.setText(""+load);
randomTotaltxt.setText(""+(sum-1));
【问题讨论】: