Java:使用相同的数字消除结果

时间:2015-07-05 11:42:56

标签: java arrays for-loop

好的,我尽可能地剥离了这段代码。我寻求的解决方案可能很简单。在这里:

import java.util.Arrays;

public class App {
    public static void main(String[] args) {
        for (int k = 1; k < 9; k++) {
            for (int p = 1; p < 9; p++) {
                for (int i = 1; i < 9; i++) {
                    if (k + p + i == 9) {
                        System.out.println("The 3 numbers that give the sum of 9 are: " + k + p + i);
                    }
                }
            }
        }
    }
}

我试图找到总共数字9的3个数字的所有组合。我已经通过3个for循环完成了这个,你可以在代码中看到,但问题是结果也显示相同的数字,但顺序不同。例如:117和711.我不想要那个,我只想要一个相同数字的组合。对此最简单的解决方案是什么?

3 个答案:

答案 0 :(得分:2)

然后你应该限制内循环。

解决方案: p < 9应为p <= ki < 9应为i <= p

<强>代码:

public static void main(String[] args) {
    for (int k = 1; k < 9; k++) {
        for (int p = 1; p <= k; p++) {
            for (int i = 1; i <= p; i++) {
                if (k + p + i == 9) {
                    System.out.println("The 3 numbers that give the sum of 9 are: " + k + p + i);

                }

            }
        }
    }
}

答案 1 :(得分:1)

正如其他人已经说过的那样,一个可能的正确答案是

    for (int k = 1; k < 9; k++) 
        for (int p = k + 1; p < 9; p++) 
            for (int i = p + 1; i < 9; i++) 
                if (k + p + i == 9)
                    System.out.println(""+k + p + i);

但你真的明白为什么吗?

想象一下,您正在寻找总计为9的 2 数字组合。您只能使用两个索引,例如 k p ,并将你的一对夫妻想象成2D平面上的点

enter image description here

您可以轻松找到您感兴趣的点,总计达9的点,此处表示为蓝点:

enter image description here

这里有10种可能的解决方案来解决[简化]问题(0,9),(1,8),(2,7),(3,6),(4,5),(5,4) ),(6,3),(7,2),(8,1),(9,0),每个解决方案都有一个你想要摆脱的双解决方案。

你怎么能这样做?通过声明 int p = k + 1 。从我们的飞机的角度来看,这意味着从搜索中排除可能解决方案的一半部分:

enter image description here

切断红色区域,并因此重复解决方案。因此,简化问题的解决方案是(包括 0 9

    for (int k = 0; k <= 9; k++) 
        for (int p = k + 1; p <= 9; p++) 
            if (k + p == 9)
                System.out.println(""+k + p);

,输出为

09
18
27
36
45

答案 2 :(得分:0)

将您的主要方法更改为此..

for (int k = 1; k < 9; k++) {
    for (int p = k + 1; p < 9; p++) {
        for (int i = p + 1; i < 9; i++) {

            if (k + p + i == 9) {
                System.out.println("The 3 numbers that give the sum of 9 are: " + k + p + i);

            }

        }
    }
}