题意:
给定数字n和m,其中1<=n<=m<=5*10^8,要求每次n可以乘以2或者乘以3,可以操作任意次数,求将转化为m一共的操作次数,如果不能转化,则输出-1.
输入:
输入的唯一一行包括两个整数n和m。
输出:
转化次数。
思路:
递归进行,递归时将操作次数+1,递归下去,直到等于或者大于,return。
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;
int n, m, tot;
void f(int a, int num) {
if(a==n){
tot=num;
return;
}
if(a>n) return;
f(a*2,num+1);
f(a*3,num+1);
}
int main() {
cin >> m >> n;
int num=0;
tot=-1;
f(m,num);
cout<<tot<<endl;
}
注:但不知道为什么第一次写完之后,编译时有个In function `__tmainCRTStartup’的错误,后来转到vs里面说什么不是有效的32位win之类的,跟着网上的教程搞了挺久也没成功,后来重写的,有时间的时候琢磨下。