1. 程式人生 > >Python “最短”挑戰(12.31)

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)]) '''