酷叮貓少兒編程講堂——Python 韓信點兵

酷叮貓少兒編程講堂——Python 韓信點兵

相傳,韓信才智過人,從不直接清點軍隊的人數,只要讓士兵三人一排,五人一排,七人一排地變換隊形,而每次他只掃一眼排位就知道總人數了.輸入包含多組數據,每組數據包含3個非負整數a,b,c.表示每種隊形的排位人數(a<3,b<5,c<7) 輸出總人數的最小值(或者報告無解)

[已知] 10 <= 總人數 <= 100

[樣例輸入] 2 1 6 2 1 3

[樣例輸出] 2 1 6: 最少 41人 2 1 3: No answer

[分析] 我們應該判斷出 a,b,c 的取值範圍,即輸入值的範圍 a --> [0,1,2] b --> [0,1,2,3,4] c --> [0,1,2,3,4,5,6] 在尋找符合條件的abc組合時,貌似一眼看不出來有什麼數學公式可以馬上解決,但是我們可以用計算機暴力尋找,這叫窮舉法.

[運行結果]

酷叮貓少兒編程講堂——Python 韓信點兵

[代碼] 使用for循環,分支,input(), print()格式化, 列表推導, 拆包賦值法, 和幾個內建函數.

# 此程序沒有做輸入錯誤檢查,請自行添加

def app():

abc = input("請連續輸入3個整數,以空格分隔:")

abclist = [int(a) for a in abc.split()]

a,b,c=abclist

people = []

for i in range(10,101):

if i%3==a and i%5==b and i%7==c:

people.append(i)

if len(people)>0:

print("Case {}: 最少 {} 人".format(abc, min(people)) )

else:

print("Case {}: No answer".format(abc))

# 運行三次

for i in range(3):

app()

如果想查看a,b,c所有的組合情況,那麼這個程序應該怎麼升級呢?大家如果感興趣請自行修改. [提示] 最簡單的辦法是對a,b,c的所有取值使用三重循環。


分享到:


相關文章: