【发布时间】:2013-07-27 00:55:01
【问题描述】:
编辑:我的程序现在可以运行了,但仍然需要对 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。编写一个程序,找到解下列: 太 + 太 + 太 + 太 = 好 最简单的技术是对每个唯一字母(在本例中为 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 循环中以控制一切,这是我修复的众多尝试之一。它(根本)不起作用,所以我将其注释掉。
【问题讨论】:
标签: java cryptarithmetic-puzzle alphametic-question