Python3 2022習題1 角谷猜想


角谷靜夫是日本的一位學者,他提出了兩條極簡單的規則,可以對任何一個自然數進行變換,最終使它陷入"4-2-1"的死循環。以一個正整數n為例,如果n為偶數,就將它變為n/2,如果除后變為奇數,則將它乘3加1(即3n+1)。不斷重復這樣的運算,經過有限步后,一定可以得到1。這就是角谷猜想。人們通過大量的驗算,從來沒有發現反例。

輸入一個正整數,若為偶數,則把它除以2,若為大於1的奇數,則把它乘以3加1。經過如此有限次運算后,可以得到數值1.求經過多少次可得到數1.第一行依次輸出從n開始每步得運算結果,第二行輸出總得運算次數,如輸入數據不是正整數,輸出“ERROR”。

分析題目

輸入一個正整數(input),若為偶數(n%2=0),則把它除以2,若為大於1的奇數(n%2=1),則把它乘以3加1。經過如此有限次運算(使用循環)后,可以得到數值1。求經過多少次可得到數1。第一行依次輸出從n開始每步得運算結果(考慮使用列表來存數據),第二行輸出總得運算次數(累加的算法),如輸入數據不是正整數,輸出“ERROR”。(分情況:需要用到分支語句if - else)

代碼實現

def even(n):
    if n%2 == 0:
        return 1
    else:
        return 0
#even函數是用來判斷輸入的數是否是偶數的,若是偶數返回1(布爾值為真),若是奇數返回0(布爾值為假)
n = int(input())
if n >= 1:
#先分析大於等於1的正整數的情況
    ls = [n]
    #列表用來存放輸出的第一行,即n本身和每次運算的結果
    m = 0
    #m用來統計計算的次數
    while(n != 1):
        #設置循環的條件,當n=1的時候就不再循環了
        if even(n):
            n = int(n/2)
            #用int()是因為輸出時需要的是整型而不是浮點型
        else:
            n = int(n*3+1)
            #用int()是因為輸出時需要的是整型而不是浮點型
        ls.append(n)
        m = m + 1
    print(','.join(str(i) for i in ls))
    #以字符形式輸出列表中的每一個元素
    print(m)
else:
    #當輸入的不是正整數的情形
    print("ERROR")

 涉及知識點

1.分支語句(if-else)

2.循環語句(while或者for i in s)以及循環條件的設置

3.數據的存儲與輸出(列表的使用和join的使用)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM