一个总数,拆分成n个数,拆分的这几个数总和等于这个总数,并且每个数有最大和最
小限制,限制区间可以为正负数.
例如:总数等于1000 , 拆分成 10个数 , 每个数的范围区间在 -10到200.
且随机拆成的10个数累加等于1000.
一个总数,拆分成n个数,拆分的这几个数总和等于这个总数,并且每个数有最大和最
小限制,限制区间可以为正负数.
例如:总数等于1000 , 拆分成 10个数 , 每个数的范围区间在 -10到200.
且随机拆成的10个数累加等于1000.
以下是参考代码
package test;
import java.util.ArrayList;
import java.util.List;
public class Test {
// 保存生成的随机数
private static List<Integer> resultList = new ArrayList<Integer>();
public static void main(String[] args) {
// 总数
int number = 10;
// 最大限制
int max = 10;
// 最小限制
int min = -2;
// 拆分成个数
int area = 4;
// 按照规则拆分数字
// 注意:数字越大,计算的时间越长
mySplitNumber(number,max,min,area);
}
/**
* 按照规则拆分数字
* @author: renkai721
* @date: 2020年4月3日 上午9:56:17
* @Title: mySplitNumber
* @Description:
* @param number
* @param max
* @param min
* @param area
*
*/
private static void mySplitNumber(int number, int max, int min, int area) {
// 按照最大最小生成随机数
boolean isRunning = true;
int index = 0;
while (isRunning) {
index+=1;
System.out.println("计算次数="+index);
// 计算中
int runningCount = myCreateRandom(max, min, area);
if(number == runningCount) {
// 如果计算的数字相加等于总数就不计算了,否则就一直计算
isRunning = false;
System.out.println("题目:总数="+number+", 最大限制="+max+", 最小限制="+min+", 拆分成="+area+"个数");
System.out.print("结果:总数="+runningCount+", 生成的随机数=[");
for (int i = 0; i < resultList.size(); i++) {
System.out.print(resultList.get(i)+",");
}
System.out.print("]");
}
}
}
/**
* 按照规则生成随机数
* @author: renkai721
* @date: 2020年4月3日 上午9:55:59
* @Title: myCreateRandom
* @Description:
* @param max
* @param min
* @param area
* @return
*
*/
private static int myCreateRandom(int max, int min, int area) {
resultList = null;
resultList = new ArrayList<Integer>();
int tempCount = 0;
for(int i=0;i<area;i++) {
// 注意,随机数规则不包含max和min两个数,如果需要包含把max+1,min-1即可
int random = (int) (Math.random()*(max-min)+min);
resultList.add(random);
tempCount += random;
}
return tempCount;
}
}
以下是输出结果
计算次数=1
计算次数=2
计算次数=3
计算次数=4
计算次数=5
计算次数=6
计算次数=7
计算次数=8
计算次数=9
计算次数=10
计算次数=11
计算次数=12
计算次数=13
计算次数=14
计算次数=15
计算次数=16
计算次数=17
计算次数=18
计算次数=19
题目:总数=10, 最大限制=10, 最小限制=-2, 拆分成=4个数
结果:总数=10, 生成的随机数=[1,2,8,-1,]