首页 > 试题广场 >

简单的变换

[编程题]简单的变换
  • 热度指数: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
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)