Description
整数变换问题。关于整数i的变换f和g定义如下:f(i)=3i;
试设计一个算法,对于给定的2 个整数n和m,用最少的f和g变换次数将n变换为m。例如,可以将整数15用4 次变换将它变换为整数4:4=gfgg(15)。当整数n不可能变换为整数m时,算法应如何处理?
对任意给定的整数n和m,计算将整数n变换为整数m所需要的最少变换次数。
试设计一个算法,对于给定的2 个整数n和m,用最少的f和g变换次数将n变换为m。例如,可以将整数15用4 次变换将它变换为整数4:4=gfgg(15)。当整数n不可能变换为整数m时,算法应如何处理?
对任意给定的整数n和m,计算将整数n变换为整数m所需要的最少变换次数。
Input
输入数据的第一行有2 个正整数n和m。n≤100000,m≤1000000000。
Output
将计算出的最少变换次数以及相应的变换序列输出。第一行是最少变换次数。第2 行是相应的变换序列。
Sample
Input
15 4
Output
4 gfgg
Hint
1 #include <iostream> 2 3 using namespace std; 4 5 int n, m, top; 6 char re[105]; 7 8 int dfs(int cur, int step) 9 { 10 if(step > top) return 0; 11 else 12 { 13 if(cur*3==m||dfs(cur*3, step+1)) 14 { 15 re[step] = 'f'; 16 return 1; 17 } 18 else if(cur/2==m||dfs(cur/2, step+1)) 19 { 20 re[step] = 'g'; 21 return 1; 22 } 23 return 0; 24 } 25 } 26 27 int main() 28 { 29 int i; 30 cin >> n >> m; 31 top = 1; 32 while(!dfs(n, 1)) 33 { 34 top++; 35 } 36 cout << top << endl; 37 for(i=top;i>=1;i--) 38 { 39 cout << re[i]; 40 } 41 cout << endl; 42 return 0; 43 }