• Game 23


    Polycarp plays "Game 23". Initially he has a number nn and his goal is to transform it to m. In one move, he can multiply n by 22 or multiply n by 33. He can perform any number of moves.

    Print the number of moves needed to transform n to m. Print -1 if it is impossible to do so.

    It is easy to prove that any way to transform n to m contains the same number of moves (i.e. number of moves doesn't depend on the way of transformation).

    Input

    The only line of the input contains two integers n and m (1nm5108).

    Output

    Print the number of moves to transform n to m, or -1 if there is no solution.

    Examples

    Input
    120 51840
    
    Output
    7
    
    Input
    42 42
    
    Output
    0
    
    Input
    48 72
    
    Output
    -1
    

    Note

    In the first example, the possible sequence of moves is: 12024072014404320129602592051840. The are 77 steps in total.

    In the second example, no moves are needed. Thus, the answer is 0.

    In the third example, it is impossible to transform 48 to 72.

    思路:比较尴尬的一道题,偷看题解不下心被抓到(关键是代码啥也没看到,倒霉的一天),比赛完后才发现网上题解代码千篇一律,思路就是先将m%n如果不等于零直接输出 -1,否则继续往下进行让m/n此时m/n的值应该都是由2 或者是 3乘起来组成(其实不然),那么就继续对其%2或者是%3求进行的次数,但是有一个例外情况就是当n=1时,例如n=1,m=5,此时会进入一个死循环,所以应该加一个判断条件就是当n%2而且n%3都不等于0时候直接令x =  -1然后break终止循环。(中间n%6是因为2x3 = 6,实际上可加可不加,所以注释掉)

    #include<cstdio>
    using namespace std;
    int main()
    {
    	long long a,b;   a代表题中n,b代表题中m。
    	while(~scanf("%lld%lld",&a,&b)){
    		long long x = 0;  //x记录执行的次数
    		if(b%a != 0){    
    			printf("-1
    ");
    		}  
    		else{  
    			b /= a;         
    			while(b != 1){  
    				/*if(b%6 == 0){   // 2x3 = 6,可以直接留下光剩下2或者3的情况,也可以不加,直接忽略
    					b /= 6; 
    					x += 2; 
    				}*/     
    				if(b%3 == 0){
    					b /= 3;
    					x++; 
    				}
    				else if(b%2 == 0){
    					b /= 2;
    					x++;
    				}
    				else{    //例如 1 5这种数据在前面b/a的时候无法筛掉,所以在这直接break然后跳出
    					x = -1;
    					break;
    				}      
    			}
    			printf("%lld
    ",x);
    		}
    	}
    	return 0;
    }
    

      听说这题可以用搜索,不过我不知道怎么做

  • 相关阅读:
    spring boot 配置时区差别
    Java 中序列化与反序列化引发的思考?
    Http 状态码总结
    Springboot
    ConcurrentHashMap 实现缓存类
    C#基础(二)拆箱与装箱,循环与选择结构,枚举
    C#基础知识(一)自己总结的。。。
    贪吃蛇大作战双人版加强版完整代码加详细步骤,不懂问博主 啦啦啦。
    C#数组随机生成四个随机数
    C#添加背景音乐
  • 原文地址:https://www.cnblogs.com/clb123/p/10584529.html
Copyright © 2020-2023  润新知