のエラーは、次の反復配列は、正の整数の集合のために定義される:このCollatzシーケンスマイナスが
N→N/2(nは偶数)→
N 3N + 1(nは奇数)
上記のルールを使用し、13で始まる、我々は以下の配列を生成:→8
13→40→20→10→5→16→4→2→1
をそれこのシーケンス(13で開始し、1で終わる)が 10項を含むことが分かる。まだ証明されていませんが(Collatz Problem)、すべての開始数は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();
}
私は自分のコードが正しく動作していた場合だけチェックするpossCounter++
後Console.WriteLine(chainNum)
を置きました。しかし、ある特定の時点では、それは正しく実行され、の負の数値を実行し始めました。私は自分のコードでどこが間違っているのか分かりません。
完璧に機能しました。ありがとうございました。 –