问题描述:
关于整数i的变换f和g定义如下:f(i)=3i;g(i)=i/2。
现要求对于给定的2个整数n和m,用最少的f和g变换次数将n变换为m。
关于整数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');
else
printf("%c",'f');
}
return 0;
}