表弟暑假在我家做作業,問我一道題::學學習
學習進+
學習進步
————————
2 0 0 1
四個字各代表乙個0-9的數字,問「學習進步」代表多少。
我很驚訝在小學作業中就出現這種題,這道題即使在現在的大學演算法課上也會作為一道智力題來考大家,很多人都答不上來~因為這道題需要很強的邏輯思維能力。
這道題的答案是1802。可能細想一下就能做出來,不過作為搞計算機的人,用計算機的方法做出來也不失為一種挑戰。
首先想到的就是窮舉法。我們都知道加法的交換律,通過交換,原來的加法就成為:步進進
習習習+
學學學學
————————
2 0 0 1
那麼設學=a,習=b,進=c,步=d。
#include
int main()
}return 0;
}通過計算機挨個排查,最終得出結果。這種方法要進行1803次迴圈(從0000迴圈到1802),如果把for (b = 0; b < 10; b++)換為for (b = 9; b>=0 ; b--)則需要1103次迴圈。
用這種方法做出來後總覺得不過癮,實在是太笨的方法了。是否還有更有意思更有效的方法呢?
我們繼續使用交換律
當學+1,結果即加上1111,
當習+1,結果即加上111,
當進+1,結果即加上11,
噹步+1,結果即加上1,
當學比標準值小1即結果小1111,
即使把習加上9也只有999!
無濟於事!
故只由當(學+1)*1111剛好大於2001而 學*1111小於2001時學的值最恰當!
學即2001除以1111的取整!
同理習即(2001-1111)除以111的取整。
依此類推!其他可以很輕鬆的口算出來。
#include
int main()
system("pause");
return 0;
}在計算機上實現演算法僅需4次迴圈,而窮舉則至少要進行1103次迴圈。
當然問題的解決辦法肯定不止這些,如果有新的方法,還請大家提出來。再次還要感謝論壇上的
wenzituo()
( ) 和其他許多壇友的支援。
Python 小學4年級的數學題
跟同事聊天的時候得知以下兩道小學四年級數學題,我無 說,確定這是4年級數學題?確定?小學4年級的數學題 1.有一串數 19962808864 這串數的排列規律是 從第 7個數起,每個數都是它前面兩 個數之和的個位數。那麼這串數中第 1999 個數字是 這 1999 個數字的和是 2.有一種細胞,每分...
一道數學題引發的世界動盪
今天在網上看到乙個這樣的試題,與大家 一下 0.99999 等於1嗎?0.99999無限迴圈和1究竟哪個大?0.9999.與1比大小 挺白痴的問題,卻引起n多人的關注與激烈討論。首先您是認為哪個答案呢?a.0.9999.1 b.0.9999.1 c.0.9999.1 d.我想絕大多數都會認為是答案a...
一道怪怪的數學題
如圖1 其中一種初態 乙個4 4的棋盤,上面有1 15共15個數字和乙個空格 用 表示 要求利用空格移動棋子把他們排成圖2的形式 目標狀態 10 1 11 14 1 2 3 4 2 3 5 5 6 7 8 8 9 4 15 9 10 11 12 12 13 6 7 13 14 15 圖1 圖2 問題...