【问题标题】:Algorithm to print all solutions of equation打印方程所有解的算法
【发布时间】:2015-10-18 09:42:29
【问题描述】:

我有这个问题:

假设我们有这个简单的方程

x1 + x2 + x3 + x4 + x5 = 20

我想打印这个方程的所有非负整数解,我必须只使用数字3, 4, 5, 6

例如:

0 + 4 + 4 + 6 + 6 = 20
etc.

我不想用特定的编程语言写,只写伪代码

有什么想法吗?

【问题讨论】:

  • 这个方程有无数个解。您的意思是要打印所有非负整数解吗?
  • 是的,都是非负数:)
  • 你想消除重复吗?例如15 + 1 + 2 + 1 + 115 + 1 + 1 + 2 + 1 将删除一个值或同时保留一个值
  • 我想保留重复项

标签: algorithm pseudocode combinatorics equation


【解决方案1】:

在java代码中

    int []numbers = {0, 3, 4, 5, 6};
    int res=20;
    int sum=0;

    for(int i:numbers)
        for(int j:numbers)
            for(int k:numbers)
                for(int l:numbers)
                    for(int m:numbers) {
                        sum = i + j + k + l + m;
                        if(sum==res) {
                        String solution = i + " " + j + " " + k + " " + l +" " + m;
                        Log.i("solution", "---- " + solution);}
                    }

在伪代码中是这样的:

FOR each number1 in the number_list
    FOR each number2 in the number_list
        FOR each number3 in the number_list
            FOR each number4 in the number_list
                FOR each number5 in the number_list
                    sum = number1+number2+number3+number4+number5;
                    IF sum IS EQUAL TO 20 THEN
                        Print number1, number2, number3, number4, number5
                    ENDIF
                ENDFOR
            ENDFOR
        ENDFOR
    ENDFOR
ENDFOR

【讨论】:

    【解决方案2】:

    这可能有效: Finding all possible combinations of numbers to reach a given sum

    您可以将数字集作为 [3,4,5,6] 开始,一旦选择就不要删除元素,如果您获得了所需的元素数量,请检查递归深度。

    这更通用,将允许解析具有不同数量元素的方程,而无需添加/删除嵌套循环。

    【讨论】:

    • 那么你不能使用 0 并且所有的解决方案都是非负的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多