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;
    }
    

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

  • 相关阅读:
    Domain many-to-many
    程序员技术练级攻略
    设置 Eclipse 智能代码提示,大幅度减少 alt+/ 使用频率,打每个字都出现代码提示的办法
    How to Build FFmpeg for Android
    How to Build Android Applications Based on FFmpeg by An Example
    winArchiver(version4.7) 软件测试
    wxWidgets vs开发环境配置
    电脑系统问题定位tips
    hisi3519开发平台配置流程
    amazon alexa使用体验
  • 原文地址:https://www.cnblogs.com/clb123/p/10584529.html
Copyright © 2011-2022 走看看