問題描述:整數i的兩種變換定義為 f(i)=3i,g(i)=i/2(向下取整);設計乙個演算法求給定兩個整數n和m,用最少次數的f 和 g變換將整數n變換為m;例如 :可以將整數15通過4次變換將它變成4,4=gfgg(15)。當整數n不可能轉換為m時,演算法應當怎麼處理。本題是當出現重複數字,認為無法轉換。
**如下:
#include
#include
#include
//vector是用陣列實現的,每次執行push_back操作,相當於底層的陣列實現要重新分配大小(即先free掉原來的儲存,後重新malloc)
using
namespace std;
vector<
char
> a;
//標頭檔案#include 中包含方法push_back,這裡使用是為了方便向陣列中插入符號
vector<
int> s;
int sum =
1, flag =1;
//sum表示轉換次數,flag是為了輸出無法變換時更加美觀
bool
solve
(int k,
int n,
int m)
}//當轉換次數過多,不符合最簡轉換要求
if(k > sum)
return
false
; b = n;
//將出現過的n進行儲存,方便判斷
s.push_back
(n);
for(
int i =
0; i <
2; i++)}
return
false;}
intmain()
system
("pause");
return0;
}
示例輸入輸出:
學習中,歡迎交流
整數變換問題 回溯法
整數變換問題 關於整數i 的變換f 和g 定義如下 f i 3i g i i 2。試設計乙個演算法,對於給定的2 個整數n 和m,用最少的f 和g 變換次數將n 變換為m。例如,可以將整數15 用4 次變換將它變換為整數4 4 gfgg 15 當整數n 不可能變換為整數m 時,演算法應如何處理?這是...
整數變換問題 回溯法
整數變換問題 整數i的兩種變換定義為f i 3i,g i i 2 向下取整 設計乙個演算法求給定兩個整數a和b,用最少次數的a和b變換將整數a變換為b 例如4 gfgg 15 題目分析 觀察f和g兩個函式發現,f總是使得自變數x變大,g總是使得自變數x變小。因此我們在決定讓x執行哪個函式之前必須先判...
整數變換問題 (回溯法)
整數變換問題 time limit 1000 ms memory limit 65536 kib problem description 整數變換問題。關於整數i的變換f和g定義如下 f i 3i 試設計乙個演算法,對於給定的2 個整數n和m,用最少的f和g變換次數將n變換為m。例如,可以將整數15...