欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統(tǒng) 1847 0

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

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

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

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

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

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

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

(3)用到的python語法:while循環(huán),for循環(huán),if語句,函數(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(
            
              '
            
            
              請輸入一個整數(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(
            
              '
            
            
              請輸入一個整數(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(
            
              '
            
            
              請輸入一個整數(shù):
            
            
              '
            
            
              )
judge(num)
            
          

?

?

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

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

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

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

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

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


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

?

?

3.回文數(shù)

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

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

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

算法分析如下:

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

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

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

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

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

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

是不是很簡單呢。

?

?

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

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

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

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

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

效率確實很低。

?

?

5.插入排序

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

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

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

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

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

(3)用到的python語法: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(
            
              '
            
            
              請輸入數(shù)組:
            
            
              '
            
            ).split(
            
              '
            
            
              ,
            
            
              '
            
            
              )))
insert(my_arr)

            
            
              print
            
            (my_arr)
          

(5)高效代碼

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

?

二:較難算法題1道

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

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

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

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

?

2.解數(shù)獨

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

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

?

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


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久久久国产精品www | 成人免费淫片aa视频免费 | 国内精品久久久久尤物 | www.av520| 久久综合五月开心婷婷深深爱 | 91久久精品久久国产性色也91 | 全部免费国产潢色一级 | 日日天天| 精品欧美乱码久久久久久 | 午夜视频在线网站 | 欧美三级一区 | 欧美精品一区二区三区免费播放 | 亚洲国产日韩欧美高清片a 高清视频在线播放 | 青青草视频网 | 国产欧美精品亚洲桃花岛 | 亚洲伊人成色综合网 | 岛国色情A片无码视频免费看 | 天天干天天色 | 欧美综合视频 | 亚洲最大在线视频 | 亚洲第一a亚洲 | 欧美精品一二三区 | 国产美女高潮 | 国产成人精品一区二区三区视频 | 亚洲精品一区二区三区不 | 日韩www| 欧洲一区二区 | 深夜寂寞影院 | 日韩色区 | 国产三级理论 | 久久久.com | 国产二区三区毛片 | 国产高清美女一级a毛片久久 | 国产在线观看午夜不卡 | 久久精品视在线看1 | 国产午夜精品一区二区三区嫩草 | 91婷婷色 | 末成年毛片在线播放 | 免费黄色a视频 | 国产精品不卡一区 | 欧美毛片网|