python算法練習(1)抓交通肇事犯

抓交通肇事犯

 

1.問題描述

一輛卡車違反交通規則,撞人後逃跑。現場有三人目睹該事件,但都沒有記住車號,只記下了車號的一些特徵。甲說:牌照的前兩位數字是相同的:乙說:牌照的後兩位數字是相同的,但與前兩位不一樣:兩是數學家,他說:4位的車號恰好是一個整數的平方。請根據以上線索求出車號。
 算法

2.肯定程序框架


根據流程,構建程序框架以下:框架

if __name__ == '__main__':
    # i表明前兩位車牌號數字,j表明後兩位車牌號數字,k表明車牌號
    for i in range(10):
        for j in range(10):  # 窮舉前兩位和後兩位車牌數字
            # 判斷前兩位和後兩位數字是否相同
            if i != j:
                # 組成4位車牌號碼
                k = 1000 * i + 100 * i + 10 * j + j
                # 判斷k是不是某個數的平方,是就輸出

 

3.判斷車牌k是是否爲某個數的平方,是就輸出

再次利用循環來實現,循環變量 temp求平方後和車牌號k比較,相等則投到車牌號,優化算法,temp的初值應該從31開始,由於小於30的數的平方小於4位數。故該層循環爲最內層循環,對每個年牌號均做如此操做。ide

for temp in range(31, 100):
    if temp * temp == k:
        print("車牌號爲:", k)

 

4.完整程序

根據上面的分析,完整程序以下:優化

if __name__ == '__main__':
    # i表明前兩位車牌號數字,j表明後兩位車牌號數字,k表明車牌號
    for i in range(10):
        for j in range(10):  # 窮舉前兩位和後兩位車牌數字
            # 判斷前兩位和後兩位數字是否相同
            if i != j:
                # 組成4位車牌號碼
                k = 1000 * i + 100 * i + 10 * j + j
                # 判斷k是不是某個數的平方,是就輸出
                for temp in range(31, 100):
                    if temp * temp == k:
                        print("車牌號爲:", k)

 

5.運行結果

在Pycharm運行程序,結果以下設計

車牌號爲: 7744

 

6.優化算法

針對上述程序,若是已經找到相應的車牌號,請讀者考慮循環是否還須要繼續呢?答案是確定的,由於算法在設計窮舉循環的時候,並無在找到車牌的時候就退出循環,而是繼續窮舉其餘i、j的狀況。咱們能夠改進算法,設置一個「標識變量」,該變量初值爲0,一旦找到車牌號,則改變該標識變量的值爲1,每次循環判斷一下標識變量的值。若是值爲1,則退出全部循環,這樣能有效的減小循環次數,改進的程序以下:blog

if __name__=="__main__":
    # i表明前兩位車牌號數字,j表明後兩位車牌號的數字,k表明車牌號
    flog = 0  # 循環標識變量,爲1時推出全部循環
    for i in range(10):
        if flog:
            break
        for j in range(10):  # 窮舉前兩位和後兩位車牌數字
            if flog:
                break
            # 判斷前兩位和後兩位數字是否相同
            if i != j:
                # 組成4位車牌號碼
                k = 1000 * i + 100 * i + 10 * j + j
                # 判斷k是不是某個數的平方,是就輸出
                for temp in range(31, 100):
                    if temp * temp == k:
                        print("車牌號爲: ", k)
                        flog = 1
                        break
相關文章
相關標籤/搜索