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

python每日經(jīng)典算法題5(基礎(chǔ)題)+1(較難題)

系統(tǒng) 1757 0

一:基礎(chǔ)算法題5道

1.阿姆斯特朗數(shù)

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

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

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

從低位到高位: 用正整數(shù)除以10,得到的余數(shù)就是低位的數(shù),商就是下次循環(huán)的數(shù)。

for循環(huán): 用for循環(huán)依次得到每一位數(shù)。就是可迭代對(duì)象依次顯示。

(3)用到的python語(yǔ)法:while循環(huán),for循環(huán),if語(yǔ)句,函數(shù)。

(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
            
            (
            
              '
            
            
              該數(shù)是阿姆斯特朗數(shù)
            
            
              '
            
            
              )
    
            
            
              else
            
            
              :
        
            
            
              print
            
            (
            
              '
            
            
              該數(shù)不是阿姆斯特朗數(shù)
            
            
              '
            
            
              )


num 
            
            = int(input(
            
              '
            
            
              請(qǐng)輸入一個(gè)整數(shù):
            
            
              '
            
            
              ))
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
            
            (
            
              '
            
            
              該數(shù)是阿姆斯特朗數(shù)
            
            
              '
            
            
              )
    
            
            
              else
            
            
              :
        
            
            
              print
            
            (
            
              '
            
            
              該數(shù)不是阿姆斯特朗數(shù)
            
            
              '
            
            
              )


num 
            
            = int(input(
            
              '
            
            
              請(qǐng)輸入一個(gè)整數(shù):
            
            
              '
            
            
              ))
judge(num)
            
          

(5)高效方法:

for循環(huán):

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


num 
            
            = input(
            
              '
            
            
              請(qǐng)輸入一個(gè)整數(shù):
            
            
              '
            
            
              )
judge(num)
            
          

?

?

2.整數(shù)數(shù)組

給定一個(gè)整數(shù)數(shù)組,判斷是否存在重復(fù)元素。

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

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

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

            
              def
            
            
               judgeInt(num):
    this_set 
            
            =
            
               set(num)
    
            
            
              if
            
             len(this_set) ==
            
               len(num):
        
            
            
              print
            
            (
            
              '
            
            
              沒(méi)有重復(fù)
            
            
              '
            
            
              )
    
            
            
              else
            
            
              :
        
            
            
              print
            
            (
            
              '
            
            
              有重復(fù)
            
            
              '
            
            
              )


my_num 
            
            = input(
            
              '
            
            
              請(qǐng)輸入一個(gè)整數(shù):
            
            
              '
            
            
              )
judgeInt(my_num)
            
          

?

?

3.回文數(shù)

判斷一個(gè)整數(shù)是否是回文數(shù)。

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

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

算法分析如下:

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

可以看到,我們根據(jù)兩種不同情況分析,即可得結(jié)果。

(3)用到的python語(yǔ)法:if判斷語(yǔ)句,切片,函數(shù)。
(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(
            
              '
            
            
              請(qǐng)輸入一個(gè)整數(shù):
            
            
              '
            
            
              )

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

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

(5)高效方法:

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


num 
            
            = input(
            
              '
            
            
              請(qǐng)輸入一個(gè)整數(shù):
            
            
              '
            
            
              )

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

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

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

是不是很簡(jiǎn)單呢。

?

?

4.回文數(shù)進(jìn)階算法,不限轉(zhuǎn)化為字符串

? ? ? ?那有沒(méi)有什么不需要先轉(zhuǎn)化為字符串的方法呢?也是有的??梢岳们懊娴陌⒛匪固乩蕯?shù)從高位到低位和從低位到高位獲取兩個(gè)列表或者字典進(jìn)行比較,這里就不分析了,直接上代碼:

            
              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(
            
              '
            
            
              請(qǐng)輸入一個(gè)整數(shù):
            
            
              '
            
            
              ))

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

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

效率確實(shí)很低。

?

?

5.插入排序

?對(duì)于未排序數(shù)組,在已排序序列中從前向后或從后向前掃描,找到相應(yīng)位置并插入。

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

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

從后先前,把該元素和左邊的元素進(jìn)行對(duì)比,如果比左邊的元素小,就互換,當(dāng)左邊的元素的編號(hào)為-1時(shí)停止。

從前先后,把該元素和右邊的元素進(jìn)行對(duì)比,如果比右邊的元素大,就互換,當(dāng)右邊的元素的編號(hào)為數(shù)組的長(zhǎng)度減1時(shí)停止。

(3)用到的python語(yǔ)法:while循環(huán),函數(shù),數(shù)據(jù)交換。

(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(
            
              '
            
            
              請(qǐng)輸入數(shù)組:
            
            
              '
            
            ).split(
            
              '
            
            
              ,
            
            
              '
            
            
              )))
insert(my_arr)

            
            
              print
            
            (my_arr)
          

(5)高效代碼

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

?

二:較難算法題1道

這些等到下一篇博客會(huì)詳細(xì)講解。

1.串聯(lián)所有單詞的字串

給定一個(gè)字符串?s?和一些長(zhǎng)度相同的單詞?words。找出 s 中恰好可以由?words 中所有單詞串聯(lián)形成的子串的起始位置。

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

?

2.解數(shù)獨(dú)

編寫(xiě)一個(gè)程序,通過(guò)已填充的空格來(lái)解決數(shù)獨(dú)問(wèn)題。

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

?

較難算法題等到之后博客會(huì)詳細(xì)講解。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲欧美一区二区三区九九九 | a级做人爱免费播放 | 久久加勒比 | 日韩综合久久 | 天天综合射 | 国产精品夜色视频一区二区 | 国农村精品国产自线拍 | 亚洲综合色婷婷在线观看 | 久久综合久色欧美婷婷 | 天天干天天摸 | 国产成人精品免费视频大全办公室 | 成人在免费观看视频国产 | 最近更新在线中文字幕一页 | 亚洲成人黄色在线 | 日韩精品一 | www.日本色| 久久国产免费一区二区三区 | 免费v片在线观看无遮挡 | 免费一级毛片在线播放欧美 | 欧美成人精品欧美一级乱黄 | 天天做天天爱天天爽天天综合 | 综合激情五月婷婷 | 日本久久精品免视看国产成人 | 57pao一国产成视频永久免费 | 免费播放毛片 | 热久久久久久久 | 亚洲香蕉久久一区二区 | 久久综合亚洲一区二区三区 | 精品综合久久久久久97超人 | 欧美亚洲国产日韩综合在线播放 | 亚洲午夜久久久精品影院视色 | 成年黄页免费大全网站 | 在线播放国产福利视频 | 99精品高清视频一区二区 | 青青久久国产成人免费网站 | 国产永久一区二区三区 | 国产色在线 | 亚洲 国产色在线视频 | aa大片成人免费网站 | 亚洲国产综合久久精品 | 日本精品不卡 | 国产精品美女久久久 |