zoukankan      html  css  js  c++  java
  • 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;
    }
    

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

  • 相关阅读:
    FTP(文件传输协议)工作原理
    Web测试和App测试有什么区别
    JMeter中文版用户手册
    shell常用命令
    RAID技术介绍和总结
    SQL Insert语句数据以以unicode码存储 解决存储数据出现乱码的问题
    IIS 允许无后缀文件访问的配置
    cocos2dx 背景用小尺寸图片滚动填充的方法
    (转)Windows7 64位系统搭建Cocos2d-x 2.2.1最新版以及Android交叉编译环境(详细教程) .
    大数据应用期末总评
  • 原文地址:https://www.cnblogs.com/clb123/p/10584529.html
Copyright © 2011-2022 走看看