以下迭代序列是爲正整數的集合來定義:在Collatz序列弊錯誤
Ñ→N/2(n爲偶數)
Ñ→3N + 1(n爲奇數)
使用上述規則,並用13開始,我們產生以下序列:
13→40→20→10→5→16→8→4→2→1
它可以看出,這個序列(從13開始並在1結束)包含10個術語。儘管尚未證明(Collatz問題),但可以認爲所有起始數字都是1.
哪一個起始數字低於100萬,會產生最長的鏈?
這是我解決手頭問題的方法。
static void Main(string[] args)
{
int possCounter = 0;
int largestChain = 0;
int largestChainNum = 0;
int chainNum = 0;
for (int i = 2; i <= 999999; i++)
{
chainNum = i;
possCounter = 1;
while (chainNum != 1)
{
if (chainNum % 2 == 0)
{
chainNum = chainNum/2;
}
else
{
chainNum = (3 * chainNum) + 1;
}
possCounter++;
Console.WriteLine(chainNum);
}
if (possCounter > largestChain)
{
largestChainNum = i;
largestChain = possCounter;
}
}
Console.WriteLine(largestChainNum);
Console.ReadLine();
}
我把Console.WriteLine(chainNum)
possCounter++
之後只是爲了檢查,如果我的代碼是正確運行。它會正確運行,但是,在某個點它開始運行負數。我不確定我的代碼出錯了。
工作完美。謝謝。 –