本文共 850 字,大约阅读时间需要 2 分钟。
题目
东东在玩游戏“Game23”。 在一开始他有一个数字n,他的目标是把它转换成m,在每一步操作中,他可以将n乘以2或乘以3,他可以进行任意次操作。输出将n转换成m的操作次数,如果转换不了输出-1。 Input 输入的唯一一行包括两个整数n和m(1<=n<=m<=5*10^8). Output 输出从n转换到m的操作次数,否则输出-1.Simple Input 1
120 51840 Simple Output 1 7 Simple Input 2 42 42 Simple Output 2 0 Simple Input 3 48 72 Simple Output 3 -1本题就是一个n通过乘以2或者乘以3变成m的过程,如果n可以变成m,那么输出改变次数,否则输出-1
那么求解可以采用递归或者其他方法,递归可能是好用,不知道为什么有bug,所以我放弃用递归了 大概递归就是change(int x,int y,int i) 然后 change(n2,m,i+1);change(n3,m,i+1);…… 没有再然后了,,,,,
既然n可以变成m,那么肯定有m%n=0,如若不然,输出-1
不妨设y=m/n,肯定有y=3a x 2b ,所以我们只需求解这个a+b的值就可以了 具体实现过程见如下代码
#include#include #define ll long longusing namespace std;ll n,m;int ans,tag;int change(int i){ if(m%n != 0) return -1; int tot=m/n; tag=tot/2; for(int j=0;j 1) return -1;}int main(){ while(scanf("%d%d",&n,&m)!=EOF){ ans=change(0); cout< <
转载地址:http://pdwzi.baihongyu.com/