整數變換問題 回溯演算法 C

2021-09-29 02:51:58 字數 1027 閱讀 2614

問題描述:整數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...