首页 > 试题广场 >

简单的变换

[编程题]简单的变换
  • 热度指数:1307 时间限制: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
思路:只有3的倍数才能满足 偶数除以二,奇数减三 循环到0.
所有,一切非三的倍数,直接返回-1;
/**
 * 
 * @param n long长整型 
 * @return int整型
 */
int Numberofoperations(long long n ) {
    // write code here
    int c=0;
    if(n%3!=0) return -1;
    else
    {
        while (1)
        {
            if(n%2==0)
            {
                n/=2;
                c++;
            }
            else
            {
                n=n-3;
                c++;
            }
            if(n==0) return c;
        }
    }
}


发表于 2021-08-30 11:31:59 回复(0)
class Solution:
    def Numberofoperations(self , n ):
        count=0
        l=[]
        while n!=0:
            n=n-3 if n%2==1 else n//2
            count+=1
            if n not in l:
                l.append(n)
            else:
                count=-1
                break
        return count

发表于 2021-06-17 23:27:38 回复(0)
只要不是三的倍数必定指向-1


public class Solution {
    /**
     *
     * @param n long长整型
     * @return int整型
     */
    public int Numberofoperations (long n) {
        // write code here
        if(n%3!=0){
            return -1;
        }else{
            int sum =1;
            while(n!=3){
                if(n%2==0){
                    n /= 2;
                }else{
                    n -=3;
                }
                sum++;
            }
            return sum;
        }
    }
}
发表于 2021-06-10 17:30:19 回复(0)
题目有问题,偶数时n=n//2
发表于 2021-04-05 20:48:07 回复(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)