整数变换问题

来源:互联网 发布:卫计委数据 编辑:程序博客网 时间:2024/06/05 01:59
问题描述:
关于整数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时,算法应如何处理?

输入样例:
15 4
输出样例:
4

gfgg

#include<stdio.h>int m=15;int n=4;int a[100]={0};int b[100];int mincount=9999;int tempcount=0;void traceback(int t){int i;if(t==n)    {if(tempcount<mincount){mincount=tempcount;for(i=1;i<=mincount;i++){b[i]=a[i];}}return;}tempcount++;if(tempcount<mincount && t>n){a[tempcount]=2;traceback(t/2);} tempcount--;tempcount++;if(tempcount<mincount && t>0 && t<n){a[tempcount]=1;traceback(t*3);}tempcount--;}int main(){traceback(m);printf("%d\n",mincount);for(int i=mincount;i>0;i--){if(a[i]==2)printf("%c",'g');elseprintf("%c",'f');}return 0;} 



原创粉丝点击