整數變換問題:關於整數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 時,演算法應如何處理?
這是3n+1問題的變形。為了找最短變換序列,用逐步加深的回溯法搜尋。
開發環境是vs2013,c++語言
//#include "stdafx.h"
#include"iostream"
using namespace std;
static int n;//要變換的數
static int m;//要變換成的數
static int k;//變換的次數
static bool found;//查詢結果
static int result[100];//最多變換100次
bool search(int dep, int n);
void compute();
int fg(int n, int i);
void compute()
}bool search(int dep, int n)
for (int i = 0; i<2; i++)
} return false;
}int fg(int n, int i)
void main()
compute();
if (found)
cout << endl;
} else{
cout <
整數變換問題 回溯法
整數變換問題 整數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...
整數變換問題 回溯演算法 C
問題描述 整數i的兩種變換定義為 f i 3i,g i i 2 向下取整 設計乙個演算法求給定兩個整數n和m,用最少次數的f 和 g變換將整數n變換為m 例如 可以將整數15通過4次變換將它變成4,4 gfgg 15 當整數n不可能轉換為m時,演算法應當怎麼處理。本題是當出現重複數字,認為無法轉換。...