Python “最短”挑战(12.31)

今天是8102年最后一天了,也是Python“最短”挑战的最后一天了。从12月13号到今天,一共写了19题,对于简洁性这方面,目前不想再深挖下去了(其实后期不少题目已经是算法相关的了,算是我水的吧)。从明天开始,我可能会陆续做一些C/C++的题目,搞一些算法相关的东西,当然,“最短”挑战也可能会不定期的写,如果遇到好的题目的话。总之,2019,继续加油。

Description

任给一个数N,如果N是偶数,就把它除以2,否则就乘3加一再除以二,如此循环,最后会得到同一个数字1。
请你编程验证这一猜想。

Input

多行输入,每行一个数N(0<N<10000),当输入0时表示输入结束。

Output

数字的变化过程,格式见Sample。
其余要求同首题

Sample Input

4
15
0

Sample Output

4 2 1
15 23 35 53 80 40 20 10 5 8 4 2 1

Reference code

def tnpo(n=int(input()),ans=[]):
    return () if n==0 else tnpo(n,[f'{n} ']) if len(ans)==0 else (*ans,'\n',*tnpo(int(input()))) if n==1 else tnpo(n//2,ans+[f'{n//2} ']) if n%2==0 else tnpo((3*n+1)//2,ans+[f'{(3*n+1)//2} '])
for x in tnpo():
    print(x,end='')
'''
def tnpo(n,ans=[]):
    if n==1:
        return ans
    if n%2==0:
        x=n//2
    else:
        x=(3*n+1)//2
    return tnpo(x,ans+[x])
while True:
    n=int(input())
    if n==0:
        break
    print(*[n,*tnpo(n)])
'''
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值