原始問題位于Project Euler 最大回文產品中,如下所示。
回文數的兩種讀法都是一樣的。由兩個 2 位數乘積構成的最大回文數是 9009 = 91 × 99。求由兩個 3 位數乘積構成的最大回文數。
背景關系中的問題可在 Dmitry Answering Largest palindrome product - C#中找到。我得到了正確的答案,但是從最小到最大而不是從最大到最小,所以我尋找更有效的答案來學習。我理解所有代碼的作用,但我不知道德米特里從哪里開始得到從最大被乘數常數中得到最小被乘數的公式。我正在瀏覽幾個編碼挑戰網站,為一些技術面試做準備。
這一行:
const int NMin = NMax - (NMax 1) / 10 1;
的
// Store the maximum palindrome number here:
long maxNumber = 0;
// The maximum multiplicand (typically: 9...9):
const int NMax = 999;
// The minimum multiplicand.
// Obviously, it couldn't be less than 90...0:
const int NMin = NMax - (NMax 1) / 10 1;
for (int i = NMax; i > NMin; i--)
{
// Starting from i since i * j = j * i for any i, j:
for (int j = i; j > NMin; j--)
{
long number = Math.BigMul(i, j);
// The fastest condition should be the first in the `if` statement:
if (number > maxNumber && isPalindome(number))
{
maxNumber = number;
Console.WriteLine("{0} = {1} * {2}", number, i, j);
break; // Leave the `j` loop, because it's guaranteed that there is
// no numbers greater than `number` for the current `i`
}
}
}
我瀏覽過的網站包括:
- 代碼的出現
- HackerEarth和HackerRank
- Leetcode我一直在努力完成綜合學習計劃
- 歐拉計劃目前僅針對問題 #4
uj5u.com熱心網友回復:
如問題 4所述,兩位數乘積的最大回文數是91*99。我相信 Dmitry 認識到給定數字范圍(他計算的 3、4 或 5,但實際上是無窮大)的所有最大回文必須是9x -> 9y(其中x代表 0 和y代表 9)。如果你總是想要最高的回文數x,那么y需要的數量是多少。這里較低的 90% 根本不值得檢查回文,因為它們不會產生最高乘法。digit - 1
因此,根據他提供的等式,他可以每次計算最小值:
NMin = NMax - (NMax 1) / 10 1 // NMin = 900 if NMax = 999
在 4 位回文的情況下,這產生5 的9,000 -> 9,999或90,000 -> 99,999。
這里要注意的重要一點是,他可能已經硬編碼NMin或選擇了更大的最小數字。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480048.html
下一篇:具有唯一矩陣轉置問題的2D阻塞
