编辑:我现在让我的程序正常工作,但仍需要对解决这个难题的else if (400*T + 40*O + 4*O == 1000*G + 100*O + 10*O + D)
部分做一些澄清。我只是想完全理解程序的每一点,谢谢。
这仅供审核之用,我花了几个小时试图解决这个问题。我要么为变量得到全零,要么是无限循环。这是一个问题,正如书中所写:
“在密码算术难题中,数学方程式是用字母写的。每个字母可以是0到9之间的数字,但没有两个字母可以是相同的。这是一个示例问题: 发送+更多=金钱 这个难题的解决方案是S = 9,R = 8,O = 0,M = 1,Y = 2,E = 5,N = 6,D = 7.编写一个程序,找到解决方案的算法难题下列: ToO + TOO + TOO + TOO =好 最简单的技术是为每个唯一字母使用嵌套循环(在本例中为T,O,G,D)。循环将系统地将数字从0到9分配给每个字母。例如,它可能首先尝试T = 0,O = 0,G = 0,D = 0然后T = 0,O = 0,G = 0,D = 1然后T = 0,O = 0,G = 0 ,D = 2等,直到T = 9,O = 9,G = 9,D = 9.在循环体中,测试每个变量是唯一的并且满足等式。输出满足等式的字母的值。“
public class PracticeProjectEight
{
public static void main(String[] args)
{
int T = 0 , O = 0 , G = 0 , D = 0;
boolean keepGoing = true;
//boolean againT = true , againO = true , againG = true , againD = true ;
// while (keepGoing)
//{
for (T = 0 ; T > 10 ; T++)
{
for (O = 0 ; O > 10 ; O++)
{
for (G = 0 ; G > 10 ; G++)
{
for (D = 0 ; D > 10 ; D++)
{
if ((D == G) || (D == O) || (D == T) || (G == O) || (G == T) || (O == T))
{
//keepGoing = true;
continue;
}
else if (400*T + 40*O + 4*O == 1000*G + 100*O + 10*O + D)
{
//keepGoing = false;
System.out.println("T = " + T);
System.out.println("O = " + O);
System.out.println("G = " + G);
System.out.println("D = " + D);
System.exit(0);
}
}
}
}
}
//}
}
}
正如您所看到的,我尝试将所有for循环放在while循环中以控制所有内容,这是我多次尝试修复之一。它根本不起作用,所以我评论了它。
答案 0 :(得分:1)
所有这些>
应为<
s。您想要< 10
,而不是> 10
。
换句话说,它应该是:
for (T = 0; T < 10; T++) {
for (O = 0; O < 10; O++) {
for (G = 0; G < 10; G++) {
for (D = 0; D < 10; D++) {
// your logic as before
}
}
}
}
答案 1 :(得分:0)
我没有运行你的代码,但只是一目了然,似乎有一些问题。
(或者,也许我错了。亲自看看。我会让你知道我在想什么。)
首先,通过您构建它的方式,似乎不允许您发现问题的多个解决方案。您告诉系统在达到解决方案时退出,不是吗?还是我误会了?
其次,你告诉程序“继续”如果遇到一个解决方案,其中两个变量对应相同的数字,但你没有告诉程序不要计算那些解决方案,我认为 - 这是什么要求的编程问题。
第三,我甚至不确定“继续前进”的角色是什么。循环的嵌套确保 - 我认为 - 编码中的那一点实现/考虑所有可能性/排列,不是吗?那么布尔条件的重点是什么?
我认为我在所有这些方面都远离基础。我只编程了3个星期。但这是我的代码(抱歉这么草率)。
(另外,你会看到我在那里扔了一个“计数器”来计算失败的组合/作业。但在这方面我也可能会感到困惑。再次,对不起,如果我的评论不在这里。)
public static void main(String[] args) {
int count = 0;
for (int G = 0; G <=9; G++)
{
for (int O = 0; O <=9; O++)
for (int T = 0; T <=9; T++)
for (int D = 0; D <=9; D++)
if (((G != O) && (G != T) && (G != D) &&
(O != T) && (O != D) && (T != D))
&&
((400 *T) + (40 * O) + (4*O)) ==
((1000*G) + (100*O) + (10*O) + (1*D)))
{
System.out.println("G = " + G + "," + " O = " + O + "," +
"T = " + T + "," + "D = " + D);
}
else count = count +1;
}
System.out.println(count);