发布网友 发布时间:2022-04-22 23:07
共2个回答
热心网友 时间:2023-07-23 04:02
先指出一下楼主你给出的数据是没办法做追答public static void main(String[] args){
//条件修改为:总和为800,最大值20,共50个数,20最多出现10次
final int count = 800; //总和
final int max = 20; //最大值
final int m = 10;//最大值出现次数
final int n = 50;//数字数
int [] array = new int [n];
int num = m;
int sum = count;
Random random = new Random();
//先随机为array所有变量赋值
for(int i = 0; i < n; i++){
do{
if(sum >= max)
array[i] = random.nextInt(21);
else
array[i] = random.nextInt(sum+1);
}while(num <= 0 && array[i]==max);
if(array[i]==max)num--;
sum -= array[i];
}
//如果结束后结果并不是所要的最大值,随机将某一位上的数补1,直至达到要求
while(sum > 0){
int a = random.nextInt(50);
if (array[a] != max){//
if(array[a]==(max-1) && num > 0){
num--;array[a]++;sum--;
}else if(array[a] < (max-1)){
array[a]++;sum--;
}
}
}
for(int i = 0; i < n; i++){
System.out.print(""+array[i]+" ");
if((i+1)%10 == 0)System.out.print("\r\n");
}
}
热心网友 时间:2023-07-23 04:02
没明白...