將 1 乘以 X 或右旋數字轉換為 N 的最低成本
我們可以使用以下技術來找到將 1 乘以 X 或將其數字右旋轉到 N 的最便宜方法。為了監控初始最低成本,建立一個成本變數。在您從 N 到 1 的過程中,在每個階段檢查 N 是否能被 X 整除。如果是,則將 N 除以 X 以更新它並繼續該過程。如果它不能被 X 整除,則將 N 的數字向右旋轉以增加其值。在這種情況下,增加成本變數。最終的成本變數值將是將 1 更改為 N 所需的最低金額。此演算法有效地確定了使用數字旋轉或乘法執行所需轉換所需的最小操作次數。
使用的方法
樸素方法:數字右旋轉
高效方法:乘以 X
樸素方法:數字右旋轉
樸素方法是從數字 1 開始,重複將其數字向右旋轉,直到達到目標數字 N。在每次旋轉中,最後一個數字成為第一個數字。儘管概念簡單,但對於較大的 N 值,此策略可能效率低下,因為它可能需要許多步驟才能達到目標數字。隨著 N 的增加,旋轉次數也迅速增加,這使得它成為確定將 1 轉換為 N 的最低成本的不太有效的方法。由於其效率低下,不建議對大型 N 值使用此方法,並且替代方法(例如將 N 除以 X)被證明在查詢轉換的最低成本方面更有效。
演算法
建立變數“cost”以跟蹤達到 N 所需的步驟,將其初始化為 1 以表示當前值。
重複執行以下步驟,直到當前數字等於 N
將當前數字的數字向右旋轉,使最後一個數字成為第一個數字。
將“cost”變數增加 1 以跟蹤所需的旋轉次數。
一旦當前數字等於 N,“cost”變數將儲存使用右旋轉將原始整數 (1) 旋轉到 N 所需的最小步驟。
示例
#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.
高效方法:乘以 X
將 1 乘以 N 的成本降至最低的最佳方法是定期將 N 除以 X,直到結果為 1。為了實現這一點,初始化一個成本變數來監控最低成本。我們從 N 的值開始,確定 N 是否可被 X 整除。如果 N 和 X 都可被整除,則成本增加並進行除法。您繼續這樣做,直到 N 等於 1。此方法比“數字右旋轉”更有效,因為它總共涉及更少的步驟才能得到結果 1。由於其更快、更有效,它是計算可行最低轉換成本的首選方法。
演算法
為了跟蹤最低成本,將變數“cost”初始化為 0。
從固定的乘數 X 和提供的目標數字 N 開始。
只要 N 大於 1,就重複步驟 4 到 6。
假設 N% X == 0,確定 N 是否可被 X 整除。
如果它可被整除 (N = N / X),則將 N 除以 X,然後將“cost”變數加 1。
如果不可被整除,則將 N 的數字向右旋轉(透過將最後一個數字移到第一個位置)並將“cost”加 1。
重複步驟 3 到 6,直到 N 變成 1。
最後的“cost”表示將 1 乘以 X 或將數字向右旋轉以更改為 N 所需的絕對最小值。
示例
#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
結論
總之,當確定透過乘以 X 或右旋數字將 1 轉換為 N 的最低成本時,乘以 X 的高效方法優於數字右旋轉的樸素方法。高效方法提供的更簡化的方法需要更少的步驟才能達到所需的數字 N。另一方面,樸素方法可能效率低下且耗時,尤其是在 N 值較高的情況下。透過使用高效方法,我們可以減少所需的過程數量並確定將 1 轉換為 N 的最經濟方法。此策略解決了確定此轉換過程的最低成本的問題,並且被證明是一種更有用且有效的演算法。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP