好的,我尽可能地剥离了这段代码。我寻求的解决方案可能很简单。在这里:
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.我不想要那个,我只想要一个相同数字的组合。对此最简单的解决方案是什么?
答案 0 :(得分:2)
然后你应该限制内循环。
解决方案: p < 9
应为p <= k
而i < 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平面上的点
您可以轻松找到您感兴趣的点,总计达9的点,此处表示为蓝点:
这里有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 。从我们的飞机的角度来看,这意味着从搜索中排除可能解决方案的一半部分:
切断红色区域,并因此重复解决方案。因此,简化问题的解决方案是(包括 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);
}
}
}
}