首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找出与给定数之和的N个大小数的组合

找出与给定数之和的N个大小数的组合
EN

Stack Overflow用户
提问于 2018-03-29 19:23:20
回答 1查看 98关注 0票数 0

给定C数和N数,我想找出与C相加的N个数,其中最高数和最低数之间的差值不应该超过一个。例如:

给定这些-> (C = 26,N= 7) --我需要一个算法来找到这些-> 4 4 4 3 3

C= 11,N=5-3 2 2 2

C= 17,N=4-5 4 4 4

C= 10,N=3-4 3 3

C= 5,N=2-3 2

编辑:示例中出现了一个错误。

我做了这个:

代码语言:javascript
复制
    //N and C are declared above.
    int[] numbers = new int[N];
    int lowBound = C / N;
    int Modulo = C % N;
    for(int i = 0; i < numbers.length; i++) {
        numbers[i] = lowBound;
    }
    while(Modulo > 0) {
        for(int i = 0; i < numbers.length; i++) {

            if(Modulo < 1) break;
            numbers[i]++;
            Modulo--;
        }
     }

我也很抱歉。

我只是在找一个先驱者,我在这里很新。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-02 16:58:03

从“注释”部分到“答复”框

原来你不需要一个循环来解决这个问题,只是数学问题。

代码语言:javascript
复制
public class SolveCombination {
    public static List<Integer> solve(int c, int n) {
        int k = c / n;
        int rk = k + 1;
        int p = (c - (k * n));

        return Stream.concat(Stream.generate(() -> rk).limit(p), 
                             Stream.generate(() -> k).limit(n - p))
                     .collect(Collectors.toList());
    }
}

用jshell运行示例

代码语言:javascript
复制
jshell> solve(26, 7)
$7 ==> [4, 4, 4, 4, 4, 3, 3]

jshell> solve(17, 4)
$8 ==> [5, 4, 4, 4]

jshell> solve(10, 3)
$9 ==> [4, 3, 3]

jshell> solve(5, 2)
$10 ==> [3, 2]

jshell> solve(11, 5)
$11 ==> [3, 2, 2, 2, 2]

jshell> solve(0, 5)
$12 ==> [0, 0, 0, 0, 0]

jshell> solve(1, 5)
$13 ==> [1, 0, 0, 0, 0]

jshell> solve(0, 0)
|  java.lang.ArithmeticException thrown: / by zero
|        at solve (#6:2)
|        at (#14:1)

jshell>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49563636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档