列表

详情


NC207716. 简单的变换

描述

给你一个正整数n,重复进行以下操作:
1.如果n是奇数,令
2.如果n是偶数,令
重复上述直至n=0停止,请输出进行操作的次数,如果n永远无法变成零,输出-1

输入描述

对于的数据,
对于的数据,
请返回最少操作数或者-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。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 3ms, 内存消耗: 376K, 提交时间: 2020-08-13 21:12:36

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

C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 412K, 提交时间: 2020-08-13 21:39:30

class Solution {
public:
    long long n,x;
    int Numberofoperations(long long n) {
        x=0;
    while (n!=0)
    {
    	if (n==1)
    	{
            return -1;
		}
		if (n&1) n-=3;
		else n>>=1;
		x++;
 	}
 	return x;
    }
};

Python3(3.5.2) 解法, 执行用时: 38ms, 内存消耗: 6544K, 提交时间: 2020-08-14 21:26:59

res = 0
n = int(input())
while n>0:
    if n%2==0:
        n = n//2
    else:
        n = n-3
    res +=1
if n!=0:
    print(-1)
else :
    print(res)

上一题