python算法練習之抓交通肇事犯
1.問題描述
一輛卡車違反交通規(guī)則,撞人后逃跑?,F場有三人目擊該事件,但都沒有記住車號,只記下了車號的一些特征。甲說:牌照的前兩位數字是相同的:乙說:牌照的后兩位數字是相同的,但與前兩位不同:丙是數學家,他說: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是是否為某個數的平方,是就輸出
再次利用循環(huán)來實現,循環(huán)變量 temp求平方后和車牌號k比較,相等則投到車牌號,優(yōu)化算法,temp的初值應該從31開始,因為小于30的數的平方小于4位數。故該層循環(huán)為最內層循環(huán),對每一個年牌號均作如此操作。
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.優(yōu)化算法
針對上述程序,如果已經找到相應的車牌號,請讀者考慮循環(huán)是否還需要繼續(xù)呢?答案是肯定的,因為算法在設計窮舉循環(huán)的時候,并沒有在找到車牌的時候就退出循環(huán),而是繼續(xù)窮舉其他i、j的情況。我們可以改進算法,設置一個“標識變量”,該變量初值為0,一旦找到車牌號,則改變該標識變量的值為1,每次循環(huán)判斷一下標識變量的值。如果值為1,則退出所有循環(huán),這樣能有效的減少循環(huán)次數,
改進的程序如下:
if __name__=="__main__":
# i代表前兩位車牌號數字,j代表后兩位車牌號的數字,k代表車牌號
flog = 0 # 循環(huán)標識變量,為1時推出所有循環(huán)
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
到此這篇關于python算法之抓交通肇事犯練習的文章就介紹到這了,更多相關python算法 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python+numpy+matplotalib實現梯度下降法
這篇文章主要為大家詳細介紹了python+numpy+matplotalib實現梯度下降法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08

