Die folgende iterative Sequenz wird für den Satz von positiven ganzen Zahlen definiert:Collatz sequence - minuser Fehler
n → n/2 (n gerade)
n → 3N + 1 (n ungerade)
Verwenden der Regel über und mit 13 beginnen, erzeugen wir die folgende Sequenz:
13 → 40 → 20 → 10 → 16 → 5 → 8 → 4 → 2 → 1
Es Zu erkennen ist, dass diese Sequenz (ab 13 beginnend und bei 1 endend) 10 Terme enthält. Obwohl es noch nicht bewiesen ist (Collatz-Problem), wird angenommen, dass alle Startnummern bei 1 enden.
Welche Startnummer, unter einer Million, produziert die längste Kette?
Dies ist meine Lösung für das Problem zur Hand.
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();
}
Ich legte die Console.WriteLine(chainNum)
nach possCounter++
nur, wenn mein Code zu überprüfen korrekt ausgeführt wurde. Es würde korrekt laufen, aber an einem bestimmten Punkt begann es zu laufen negative Zahlen. Ich bin mir nicht sicher, wo ich mit meinem Code falsch gelaufen bin.
Arbeitete perfekt. Vielen Dank. –