亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python每日經典算法題5(基礎題)+1(較難題)

系統 1986 0

一:基礎算法題5道

1.阿姆斯特朗數

如果一個n位正整數等于其各位數字的n次方之和,則稱該數為阿姆斯特朗數。判斷用戶輸入的數字是否為阿姆斯特朗數。

(1)題目分析: 這里要先得到該數是多少位的,然后再把每一位的數字截取出來,把各位數字的n次方之和和該數一起判斷即可
(2)算法分析:python中有len()函數可以得到一個字符串的長度,因此需要先把一個正整數轉化為正整數字符串。然后從高位向低位截取(也可以反過來)。或者高效算法利用for循環切片。

從高位到低位: 用正整數除了10的n次方,得到的商就是高位的數,余數就是下次循環的數。

從低位到高位: 用正整數除以10,得到的余數就是低位的數,商就是下次循環的數。

for循環: 用for循環依次得到每一位數。就是可迭代對象依次顯示。

(3)用到的python語法:while循環,for循環,if語句,函數。

(4)博主答題代碼:

從高位到低位:

            
              def
            
            
               judge(num):
    mysum 
            
            =
            
               0
    n 
            
            = len(str(num)) - 1
            
              
    m 
            
            = n + 1
            
              
    firstNum 
            
            =
            
               num
    
            
            
              while
            
             num >
            
               0:
        quotient 
            
            = num //  (10**
            
              n)
        remainder 
            
            = num % (10**
            
              n)
        mysum 
            
            += quotient **
            
               m
        num 
            
            =
            
               remainder
        n 
            
            -= 1
    
            
              if
            
             mysum ==
            
               firstNum:
        
            
            
              print
            
            (
            
              '
            
            
              該數是阿姆斯特朗數
            
            
              '
            
            
              )
    
            
            
              else
            
            
              :
        
            
            
              print
            
            (
            
              '
            
            
              該數不是阿姆斯特朗數
            
            
              '
            
            
              )


num 
            
            = int(input(
            
              '
            
            
              請輸入一個整數:
            
            
              '
            
            
              ))
judge(num)
            
          

從低位到高位:

            
              def
            
            
               judge(num):
    mysum 
            
            =
            
               0
    n 
            
            = len(str(num)) - 1
            
              
    m 
            
            = n + 1
            
              
    firstNum 
            
            =
            
               num
    
            
            
              while
            
             num >
            
               0:
        quotient 
            
            = num // 10
            
              
        remainder 
            
            = num % 10
            
              
        mysum 
            
            += remainder **
            
               m
        num 
            
            =
            
               quotient
        n 
            
            -= 1
    
            
              if
            
             mysum ==
            
               firstNum:
        
            
            
              print
            
            (
            
              '
            
            
              該數是阿姆斯特朗數
            
            
              '
            
            
              )
    
            
            
              else
            
            
              :
        
            
            
              print
            
            (
            
              '
            
            
              該數不是阿姆斯特朗數
            
            
              '
            
            
              )


num 
            
            = int(input(
            
              '
            
            
              請輸入一個整數:
            
            
              '
            
            
              ))
judge(num)
            
          

(5)高效方法:

for循環:

            
              def
            
            
               judge(num):
    n 
            
            =
            
               len(num)
    sum 
            
            =
            
               0
    
            
            
              for
            
             i 
            
              in
            
            
               num:
        sum 
            
            += int(i) **
            
               n
    
            
            
              if
            
             sum ==
            
               int(num):
        
            
            
              print
            
            (
            
              '
            
            
              該數是阿姆斯特朗數
            
            
              '
            
            
              )
    
            
            
              else
            
            
              :
        
            
            
              print
            
            (
            
              '
            
            
              該數不是阿姆斯特朗數
            
            
              '
            
            
              )


num 
            
            = input(
            
              '
            
            
              請輸入一個整數:
            
            
              '
            
            
              )
judge(num)
            
          

?

?

2.整數數組

給定一個整數數組,判斷是否存在重復元素。

(1)題目分析: 利用list的內置函數count計算每一個元素的數量,時間會很多,內置函數list.count(i)時間復雜度為O(n) 外面嵌套一層循環,總的時間為O(n^2),不是一個高效算法。

可以排序后對相鄰元素判斷是否相等。還有一個方法是利用set()特性進行判斷。

(2)算法分析:根據上面的題目分析用高效一點的算法展示。
(3)用到的python語法:
(4)博主答題代碼:

            
              def
            
            
               judgeInt(num):
    this_set 
            
            =
            
               set(num)
    
            
            
              if
            
             len(this_set) ==
            
               len(num):
        
            
            
              print
            
            (
            
              '
            
            
              沒有重復
            
            
              '
            
            
              )
    
            
            
              else
            
            
              :
        
            
            
              print
            
            (
            
              '
            
            
              有重復
            
            
              '
            
            
              )


my_num 
            
            = input(
            
              '
            
            
              請輸入一個整數:
            
            
              '
            
            
              )
judgeInt(my_num)
            
          

?

?

3.回文數

判斷一個整數是否是回文數。

(1)題目分析: 回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數

(2)算法分析: 可以利用python的切片很方便地解決該問題,但是如果是其它語言的話,沒有切片。因此需要考慮普遍的方法

算法分析如下:

python每日經典算法題5(基礎題)+1(較難題)_第1張圖片

可以看到,我們根據兩種不同情況分析,即可得結果。

(3)用到的python語法:if判斷語句,切片,函數。
(4)博主答題代碼:

            
              def
            
            
               judge(x):
    this_str 
            
            =
            
               str(x)
    
            
            
              if
            
             len(this_str) % 2 !=
            
               0:    
        mid 
            
            = int((len(this_str) + 1 ) / 2 - 1
            
              )
        left 
            
            = mid - 1
            
              
        right 
            
            =
            
               mid
        
            
            
              if
            
             this_str[0:left+1] == this_str[-1:right:-1
            
              ]:
            
            
            
              return
            
            
               True
        
            
            
              else
            
            
              :
            
            
            
              return
            
            
               False

    
            
            
              if
            
             len(this_str) % 2 ==
            
               0:
        mid 
            
            = int(len(this_str)/2) - 1
        
            
              if
            
             this_str[0:mid+1] == this_str[-1:mid:-1
            
              ]:
            
            
            
              return
            
            
               True
        
            
            
              else
            
            
              :
            
            
            
              return
            
            
               False


num 
            
            = input(
            
              '
            
            
              請輸入一個整數:
            
            
              '
            
            
              )

            
            
              if
            
            
               judge(num):
    
            
            
              print
            
            (
            
              '
            
            
              {0}是回文數
            
            
              '
            
            
              .format(num))

            
            
              else
            
            
              :
    
            
            
              print
            
            (
            
              '
            
            
              {0}不是回文數
            
            
              '
            
            .format(num))
          

(5)高效方法:

            
              def
            
            
               judge(x):
    
            
            
              return
            
             str(x) == str(x)[::-1
            
              ]


num 
            
            = input(
            
              '
            
            
              請輸入一個整數:
            
            
              '
            
            
              )

            
            
              if
            
            
               judge(num):
    
            
            
              print
            
            (
            
              '
            
            
              {0}是回文數
            
            
              '
            
            
              .format(num))

            
            
              else
            
            
              :
    
            
            
              print
            
            (
            
              '
            
            
              {0}不是回文數
            
            
              '
            
            .format(num))
          

只需要一行代碼即可以判斷,這就是切片的好處。

是不是很簡單呢。

?

?

4.回文數進階算法,不限轉化為字符串

? ? ? ?那有沒有什么不需要先轉化為字符串的方法呢?也是有的。可以利用前面的阿姆斯特朗數從高位到低位和從低位到高位獲取兩個列表或者字典進行比較,這里就不分析了,直接上代碼:

            
              def
            
            
               judge(num1):
    
            
            
              if
            
            
              '
            
            
              -
            
            
              '
            
            
              in
            
            
               str(num1):
        
            
            
              return
            
            
               False
    
            
            
              if
            
             num1 >= 0 
            
              and
            
             num1 < 10
            
               :
        
            
            
              return
            
            
               True
    list1 
            
            = [];list2 =
            
               []
    num2 
            
            =
            
               num1
    n1 
            
            = len(str(num1)) - 1
            
              
    n2 
            
            = len(str(num2)) - 1

    
            
              while
            
             num1 >
            
               0:
        quotient1 
            
            = num1 //  (10**
            
              n1)
        remainder1 
            
            = num1 % (10**
            
              n1)
        list1.append(quotient1)
        num1 
            
            =
            
               remainder1
        n1 
            
            -= 1

    
            
              while
            
             num2 >
            
               0:
        quotient2 
            
            = num2 // 10
            
              
        remainder2 
            
            = num2 % 10
            
              
        list2.append(remainder2)
        num2 
            
            =
            
               quotient2
        n2 
            
            -= 1
            
              
    num 
            
            =
            
               0
    
            
            
              for
            
             i 
            
              in
            
            
               range(0,len(list1)):
        
            
            
              if
            
             list2[i] ==
            
               list1[i]:
            num 
            
            += 1
    
            
              if
            
             num ==
            
               len(list1):
        
            
            
              return
            
            
               True
    
            
            
              else
            
            
              :
        
            
            
              return
            
            
               False


num 
            
            = int(input(
            
              '
            
            
              請輸入一個整數:
            
            
              '
            
            
              ))

            
            
              if
            
            
               judge(num):
    
            
            
              print
            
            (
            
              '
            
            
              {0}是回文數
            
            
              '
            
            
              .format(num))

            
            
              else
            
            
              :
    
            
            
              print
            
            (
            
              '
            
            
              {0}不是回文數
            
            
              '
            
            .format(num))
          

效率確實很低。

?

?

5.插入排序

?對于未排序數組,在已排序序列中從前向后或從后向前掃描,找到相應位置并插入。

(1)題目分析: 這是個簡單的算法,只需要把要每個元素依次和相鄰的元素比較即可

(2)算法分析:想用一個變量標記遍歷到的元素,然后,有兩種方法。

從后先前,把該元素和左邊的元素進行對比,如果比左邊的元素小,就互換,當左邊的元素的編號為-1時停止。

從前先后,把該元素和右邊的元素進行對比,如果比右邊的元素大,就互換,當右邊的元素的編號為數組的長度減1時停止。

(3)用到的python語法:while循環,函數,數據交換。

(4)博主答題代碼:

            
              def
            
            
               insert(arr):    
    
            
            
              for
            
             i 
            
              in
            
             range(1
            
              ,len(arr)):
        j 
            
            =
            
               i
        
            
            
              while
            
             j >
            
               0:
            
            
            
              if
            
             arr[j] < arr[j-1
            
              ]:
                arr[j
            
            -1],arr[j] = arr[j],arr[j-1
            
              ]
            j 
            
            -= 1
            
                      


my_arr 
            
            = list(map(int,input(
            
              '
            
            
              請輸入數組:
            
            
              '
            
            ).split(
            
              '
            
            
              ,
            
            
              '
            
            
              )))
insert(my_arr)

            
            
              print
            
            (my_arr)
          

(5)高效代碼

用python的列表排序函數sort()可以很方便進行排序。

?

二:較難算法題1道

這些等到下一篇博客會詳細講解。

1.串聯所有單詞的字串

給定一個字符串?s?和一些長度相同的單詞?words。找出 s 中恰好可以由?words 中所有單詞串聯形成的子串的起始位置。

注意子串要與?words 中的單詞完全匹配,中間不能有其他字符,但不需要考慮?words?中單詞串聯的順序。

?

2.解數獨

編寫一個程序,通過已填充的空格來解決數獨問題。

空白格用? '.' ?表示。

?

較難算法題等到之后博客會詳細講解。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一七六九1769视频免费观看 | 日本xxxx色视频在线观看免 | 青青青爽视频在线观看 | 最新中文字幕一区二区乱码 | 奇米在线观看 | 欧美麻豆久久久久久中文 | 黄色在线免费观看网站 | 欧美精品亚洲精品日韩 | 免费在线不卡视频 | 亚洲免费一级视频 | 日韩免费一级片 | 久久99国产一区二区三区 | 精品一区二区三区四区 | 99久久国产综合精品女不卡 | 精品国产一区二区三区四区不 | 久久久日本精品一区二区三区 | 亚洲一区二区三区香蕉 | 亚洲偷图色综合色就色 | 九九综合视频 | a成人毛片免费观看 | 人人揉揉香蕉大免费不卡 | 国产热re99久久6国产精品 | 92国产福利久久青青草原 | 亚洲精品福利在线 | 中文字幕一区二区三区四区五区人 | 久久久99精品免费观看 | 一区二区网站 | 在线视频久久 | 久久久精品2018免费观看 | 在线免费观看一级毛片 | 午夜大片免费男女爽爽影院久久 | jiucao在线观看精品 | 久久精品免视看国产陈冠希 | 我想看一级播放片一级的 | 日本一区二区高清 | 青青青国产精品一区二区 | 久艹在线播放 | 性欧美视频 | 九九久久国产精品 | 亚洲va久久久噜噜噜久久男同 | 一级床上爽高清播放 |