通过回归显示n个和为100的数字的算法



我需要一个算法,它接受总数计数和第一个数字作为输入,其中这些数字的总和必须是100。

示例:

输入:count=5,第一个=50

输出必须是这样的:50、30、15、3.5、1.5

输入:count=7,第一个=30

输出必须是这样的:30、25、20、10、7.5、5、2.5

对我来说,输出如我在示例中所示并不重要,它都是关于的

我只是做了这个代码,但我不知道如何集成"第一个";变量:

public class Main {
public static void main(String[] args) {
var count = 5;
var first = 50;
System.out.println(calc(first, count)); // [6.7, 13.3, 20.0, 26.7, 33.3]
}
private static List<BigDecimal> calc(double first, double count) {
double total = 100;
int multiplier = 0;
for (int i = 1; i <= count; i++) {
multiplier+=i;
}
BigDecimal a = BigDecimal.valueOf(total / multiplier);
List<BigDecimal> list = new ArrayList<>();
BigDecimal b = BigDecimal.ZERO;
for (int i = 0; i < count; i++) {
b = b.add(a);
list.add(b.setScale(1, RoundingMode.HALF_UP));
}
return list;
}
}

为什么不能从总数中减去第一个数字,并将计数减少1?

import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
var count = 5;
var first = 50;
System.out.println(calc(first, count)); // [6.7, 13.3, 20.0, 26.7, 33.3]
}
private static List<BigDecimal> calc(double first, double count) {
double total = 100 - first; // Decrease total by first
count--; // Decrement
int multiplier = 0;
for (int i = 1; i <= count; i++) {
multiplier+=i;
}
BigDecimal a = BigDecimal.valueOf(total / multiplier);
List<BigDecimal> list = new ArrayList<>();
list.add(BigDecimal.valueOf(first)); // Add first to list
BigDecimal b = BigDecimal.ZERO;
for (int i = 0; i < count; i++) {
b = b.add(a);
list.add(b.setScale(1, RoundingMode.HALF_UP));
}
return list;
}
}

最新更新