给定一个正整数X和一个最大值M,要求分为多组,组数不限
给定一个正整数X和一个最大值M,要求分为多组,组数不限
规则:
1.每组的最大值不能超过M
2.每组的最小值大于或等于1000
3.每组相加之和为X,
4.每组都是整数
首先尝试保持所有分组≤M
如果不可能,则允许最后一个分组>M,但必须≥1000
public static List<Integer> splitX(int X, int M) {
List<Integer> groups = new ArrayList<>();
if (X < 1000) {
// 无法满足条件,因为每组至少为1000
return groups;
}
int k = X / M;
int r = X % M;
if (r == 0) {
// 完全由M组成
for (int i = 0; i < k; i++) {
groups.add(M);
}
} else if (r >= 1000) {
// 可以添加余数r作为一个组
for (int i = 0; i < k; i++) {
groups.add(M);
}
groups.add(r);
} else {
// 余数r < 1000,需要调整
if (M >= 2000 - r) {
// 可以从一个M中借出部分给r
for (int i = 0; i < k - 1; i++) {
groups.add(M);
}
groups.add(M + r - 1000);
groups.add(1000);
} else {
// 无法调整,允许最后一个组 > M
int kPrime = (X - 1000) / M;
int R = X - kPrime * M;
for (int i = 0; i < kPrime; i++) {
groups.add(M);
}
groups.add(R);
}
}
return groups;
}