Heim > Artikel > Backend-Entwicklung > Minimaler Aufwand für die Umwandlung von 1 in N, der durch Multiplikation mit X oder Rechtsdrehung der Zahl erreicht werden kann
Mit der folgenden Technik können wir den günstigsten Weg finden, X zu multiplizieren oder die Zahl rechts von 1 nach N zu drehen. Um die anfänglichen Mindestkosten zu überwachen, erstellen Sie eine Kostenvariable. Wenn Sie von N auf 1 gehen, prüfen Sie auf jeder Stufe, ob N durch X teilbar ist. Wenn ja, aktualisieren Sie es, indem Sie N durch X teilen und den Vorgang fortsetzen. Wenn N nicht durch X teilbar ist, durchlaufen Sie die Ziffern von N in einer Schleife nach rechts, um den Wert zu erhöhen. Fügen Sie in diesem Fall die Kostenvariable hinzu. Der endgültige Wert der Kostenvariablen ist der Mindestbetrag, der erforderlich ist, um 1 in N umzuwandeln. Der Algorithmus ermittelt mithilfe numerischer Rotation oder Multiplikation effizient die zur Durchführung der gewünschten Transformation erforderlichen Mindestoperationen.
Naiver Ansatz: Rechtsdrehung der Zahlen
Effiziente Methode: mit X multiplizieren
Der naive Ansatz besteht darin, mit der Zahl 1 zu beginnen und ihre Zahlen wiederholt nach rechts zu drehen, bis Sie die Zielzahl N erreichen. Bei jeder Drehung ändert sich die letzte Zahl zur ersten Zahl. Obwohl diese Strategie konzeptionell einfach ist, kann sie für große N-Werte ineffizient sein und möglicherweise viele Schritte erfordern, um die Zielzahl zu erreichen. Wenn N zunimmt, nimmt auch die Anzahl der Umdrehungen schnell zu, was es zu einer weniger effektiven Methode zur Bestimmung der Mindestkosten für die Umwandlung von 1 in N macht. Aufgrund ihrer Ineffizienz wird diese Methode nicht für große N-Werte empfohlen, während sich andere Methoden, wie z. B. die Division von N durch X, als effizienter bei der Ermittlung der niedrigsten Transformationskosten erwiesen haben.
Erstellen Sie die Variable „Kosten“, um die Schritte zu verfolgen, die zum Erreichen von N erforderlich sind, und initialisieren Sie sie auf 1, um den aktuellen Wert darzustellen.
Wiederholen Sie diese Anweisungen, bis die aktuelle Zahl gleich N ist:
Drehen Sie die Ziffern der aktuellen Zahl nach rechts, sodass die letzte Ziffer zur ersten Ziffer wird.
Erfassen Sie die Anzahl der erforderlichen Drehungen, indem Sie die Variable „Kosten“ um 1 erhöhen.
Sobald die aktuelle Zahl gleich N ist, speichert die Variable „Kosten“ die Mindestanzahl an Schritten, die erforderlich sind, um die ursprüngliche Ganzzahl (1) mithilfe einer Rechtsdrehung auf N zu drehen.
#include <iostream> #include <cmath> int rotateDigits(int num, int numDigits) { return (num / 10) + (num % 10) * std::pow(10, numDigits - 1); } int main() { int N = 123; // Replace this with your desired N value int current = 1; int cost = 0; bool found = false; while (current != N) { int numDigits = std::to_string(current).length(); current = rotateDigits(current, numDigits); cost++; if (cost > N) { std::cout << "N cannot be reached from 1 using right rotations." << std::endl; found = true; break; } } if (!found) { std::cout << "Minimum steps to reach N: " << cost << std::endl; } return 0; }
N cannot be reached from 1 using right rotations.
Der beste Weg, die Kosten für die Multiplikation von 1 mit N zu minimieren, besteht darin, N regelmäßig durch X zu dividieren, bis das Ergebnis 1 ist. Um dies zu erreichen, initialisieren Sie eine Kostenvariable, um die Mindestkosten zu überwachen. Wir bestimmen, ob N durch X teilbar ist, indem wir mit dem Wert von N beginnen. Wenn sowohl N als auch X teilbar sind, erhöhen sich die Kosten und es wird eine Divisionsoperation durchgeführt. Wiederholen Sie diesen Vorgang, bis N gleich 1 ist. Diese Methode ist effizienter als die „Zahlenrechtsrotation“, da weniger Schritte erforderlich sind, um das Ergebnis 1 zu erhalten. Aufgrund seiner schnelleren und effizienteren Natur ist es die bevorzugte Methode zur Ermittlung der niedrigsten Wechselkosten.
Um die Mindestkosten zu verfolgen, initialisieren Sie die Variable „Kosten“ auf 0.
Beginnen Sie mit einer vorgegebenen Zielzahl N und verwenden Sie einen festen Multiplikator X.
Solange N größer als 1 ist, wiederholen Sie die Schritte 4 bis 6.
Unter der Annahme, dass N % X == 0 ist, bestimmen Sie, ob N durch X teilbar ist.
Wenn N teilbar ist (N = N / X), dividiere N durch X und addiere 1 zur Variablen „Kosten“.
Wenn nicht teilbar, schleifen Sie die N Zahlen nach rechts (indem Sie die letzte Ziffer zur ersten verschieben) und erhöhen Sie die „Kosten“ um 1.
Wiederholen Sie die Schritte 3 bis 6, bis N zu 1 wird.
Die letzten „Kosten“ stellen den Mindestaufwand dar, der erforderlich ist, um mit X zu multiplizieren oder die Zahl nach rechts zu verschieben, um 1 in N zu ändern.
#include <iostream> #include <cmath> int main() { int X = 3; int N = 100; int cost = 0; while (N > 1) { if (N % X == 0) { N /= X; cost++; } else { int lastDigit = N % 10; N = (N / 10) + (lastDigit * std::pow(10, std::floor(std::log10(N)))); cost++; } } std::cout << "Final cost: " << cost << std::endl; return 0; }
Final cost: 2
Zusammenfassend: Wenn es darum geht, die niedrigsten Kosten für die Umwandlung von 1 in N durch Multiplikation mit X oder Rechtsdrehung der Zahl zu ermitteln, ist die Multiplikation mit die effizienteste Methode Der schlankere Ansatz effizienter Methoden erfordert weniger Schritte, um die erforderliche Anzahl von N zu erreichen. Andererseits können naive Methoden insbesondere bei höheren N-Werten unwirksam und zeitaufwändig sein. Wir können die erforderlichen Prozesse reduzieren und mithilfe effizienter Methoden den wirtschaftlichsten Weg zur Umwandlung von 1 in N ermitteln. Diese Strategie löst das Problem der Bestimmung der Mindestkosten dieses Konvertierungsprozesses und erweist sich als nützlicherer und effizienterer Algorithmus.
Das obige ist der detaillierte Inhalt vonMinimaler Aufwand für die Umwandlung von 1 in N, der durch Multiplikation mit X oder Rechtsdrehung der Zahl erreicht werden kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!