首页 > 试题广场 >

简单的变换

[编程题]简单的变换
  • 热度指数:1310 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给你一个正整数n,重复进行以下操作:
1.如果n是奇数,令
2.如果n是偶数,令
重复上述直至n=0停止,请输出进行操作的次数,如果n永远无法变成零,输出-1

示例1

输入

2

输出

-1

说明

1:2->1(2/2=1)
2:1->-2(1-3=-2)
3:-2->-1((-2)/2=(-1))
4.-1->-4(-1-3=-4)
5.-4->-2((-4)/2=(-2))
6.-2->-1((-2)/2=(-1))
.......开始进入第三步操作到第五步操作的循环,n永远无法等于0,所以返回-1。
示例2

输入

9

输出

3

说明

1.9->6(9-3=6)
2.6->3(6/2=3)
3.3->0(3-3=0)
三步操作后n变为0,所以返回3。

备注:
对于的数据,
对于的数据,
请返回最少操作数或者-1
因为无限循环里总会有-1,所以当n取到-1时可以直接跳出循环
import java.util.*;


public class Solution {
    /**
     * 
     * @param n long长整型 
     * @return int整型
     */
    public int Numberofoperations (long n) {
        // write code here
        int i=0;
        while(n!=0){
            if(n==-1){i=-1;break;}
            if(n%2!=0){n=n-3;i++;}
        if(n!=0){n=n/2;i++;}
        }
        return i;
        
    }
}

发表于 2020-08-25 23:58:16 回复(0)