Dies ist der Hintergrund dieser Frage:Eine Rekursion verwandtes Thema in C#
Hintergrund jede ganze Zahl Nehmen n größer als 1 ist und wenden Sie den folgenden Algorithmus
Wenn n ungerade ist, dann ist n = n × 3 + 1 else n = n/2
Wenn n gleich 1 ist, dann stoppen, anderenfalls mit Schritt zu 1
Nachfolgend zeigt, was passiert, wenn ein Start-n von 6
6 unter Verwendung von - 3 bis 10 - 5 bis 16 - 8 - 4 - 2 - 1
Nach 8 Generationen des Algorithmus wir auf 1 erhalten. Es wird vermutet, dass es für jede Zahl größer als 1 ist die wiederholte Anwendung dieses Algorithmus wird schließlich 1.
die Frage zu bekommen, ist, wie kann ich eine Zahl finden, die genau 500 Generationen dauern bis 1 zu reduzieren?
Der folgende Code ist meine Version, aber anscheinend eine falsche Logik. Könnten Sie mir helfen, das zu korrigieren? Danke im Voraus.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sequence1
{
class Program
{
static void Main(string[] args)
{
int start = 1;
int flag = 0;
int value;
while(true){
int temp = (start - 1)/3;
string sta = temp.ToString();
if (Int32.TryParse(sta, out value))
{
if (((start - 1)/3) % 2 == 1)
{
start = (start - 1)/3;
flag++;
if (flag == 500)
{
break;
}
}
else
{
start = start * 2;
flag++;
if (flag == 500)
{
break;
}
}
}
else
{
start = start * 2;
flag++;
if (flag == 500)
{
break;
}
}
}
Console.WriteLine("result is {0}", start);
Console.ReadLine();
}
}
}
Ein 'int' namens' flag'? 'ToString' gefolgt von' Tryparse'? Entschuldigung, aber dieser Code ist nicht lesbar. – Henrik
Dies ist eine "es funktioniert nicht" -Frage ohne Details. Was läuft schief, was ist der Fehler? –
Sie erwähnten Rekursionen, aber ich sehe nur Schleifen. – Nolonar