java - 如何在所有可能的组合中找到 3 个数字,总和结果等于 n?

标签 java math partition

我在 Authomata 工作,需要三个求和等于 n 的数字 例如,如果 n = 2,我需要的数字是:

200
020
002
110
101
011

组合是否重复并不重要。

如果 n = 3 我需要:

300
030
003
210
201
021
120
012
102
111

所以我读到这类似于数论中的划分,但我可以得到只有 3 个数字给我目标值 (n) 的特殊情况。 (代码来 self 在这里得到的一个例子)

package automata2;

import java.util.ArrayList;

/**
 *
 * @author jaime
 */
public class Automata2 {


    /**
     * @param args the command line arguments
     */

    public static void main(String[] args) {
        int N = 14;
        partition(N);
    }

    public static void partition(int n) {
        partition(n, n, "");
    }
    public static void partition(int n, int max, String prefix) {
        if (n == 0) {
            System.out.println(prefix);
            return;
        }

        for (int i = Math.min(max, n); i >= 1; i--) {
            partition(n-i, i, prefix + " " + i);
        }
    }
}

但我只需要三位数的所有组合,不是所有的组合,因为 14 直到 1 1 1 1 1 1 1 1 1 1 1 1 1 1

最佳答案

生成数字的算法是这样的。此代码将生成所有编号。

public class main1 {
    public static void main(String args[]) {

        int N = 5, n1, n2, n3;

        for (n1 = 0; n1 <= N; n1++) {
            for (n2 = 0; n2 <= N; n2++) {
                for (n3 = 0; n3 <= N; n3++) {
                    if ( (n1+n2+n3)==N ) {
                        System.out.println(n1 + " " + n2 + " " + n3);
                    }
                }
            }
        }
    }
}

您可以做的是代替 System.out.println(n1+" "+n2+" "+n3) ,您可以将数字存储在数组列表中,然后排列列表。

关于java - 如何在所有可能的组合中找到 3 个数字,总和结果等于 n?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25107860/

相关文章:

java - 不可预测的双重

java - 在java中判断num是否是2的幂?

java - 使用触摸输入移动相机 Cocos2D android

php - 找到圆和沿圆的点?

java - 访问heroku服务器上的文件或文件夹

mysql - 如何在 SQL 百分位窗口函数上添加条件?

甲骨文12c : Wasted Disk Space and Performance

azure - 向 Azure IoT 中心分区发送消息

java - 由于未加载依赖的任务类而导致 Ant 构建失败

java - 使用属性 load-on-startup 在 servlet init 方法中进行 JNDI 查找