編輯:我得到了我的程序現在工作,但仍需要一些澄清的「其他如果(400 * T + 40 * O + 4 * O == 1000 * G + 100 * O + 10 * O + D)「是解決這個難題的關鍵。我只是想完全理解程序的每一點,謝謝。Java程序來解決簡單的加密算法難題
這僅用於審查目的,我花了幾個小時試圖弄清楚。我要麼爲變量獲得全零,要麼是無限循環。這是一個問題,因爲它寫在書中:
「在cryptarithmetic puzzles中,數學方程是用字母寫的,每個字母可以是一個0到9的數字,但是沒有兩個字母可以是相同的。一個樣本問題: SEND + MORE = MONEY 這個問題的解決方案是S = 9,R = 8,O = 0,M = 1,Y = 2,E = 5,N = 6,D = 7。一個程序可以找到解決以下問題的解決方案: TOO + TOO + TOO + TOO = GOOD 最簡單的方法是對每個唯一的字母(在本例中爲T,O,G,D)使用嵌套循環,循環將系統地將0到9的數字分配給每個字母。例如,itmightfirsttryT = 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);
}
}
}
}
}
//}
}
}
正如你所看到的,我試圖把所有的在一個while循環來控制一切,我多次嘗試解決的一個。它沒循環。「T工作(所有),所以我評論它
@ Dennis Meng謝謝!這樣做的竅門,並能夠放棄繼續聲明,只是有一個空的機構,如果聲明。我犯了這樣一個愚蠢的錯誤,應該抓住這個錯誤,但我認爲那些錯誤並且在其他地方尋找錯誤。另外,任何人都在意進一步解釋「else if(400 * T + 40 * O + 4 * O == 1000 * G + 100 * O + 10 * O + D)」?再次,謝謝。 – novice9
它發生了。很高興我能幫上忙。 –
'else if(400 * T + 40 * O + 4 * O == 1000 * G + 100 * O + 10 * O + D)'實際上看它是否是一個解決方案。這裏的「TOO」意味着'T'是數百位數字,'O'是十位和一位數字,給你'100 * T + 10 * O + O',並且你乘以4,因爲它實際上是'TOO + TOO + TOO + TOO'你想要在左邊。右側同樣遵循。 –