Python “最短”挑戰(12.31)
阿新 • • 發佈:2019-01-13
今天是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)])
'''