相傳,韓信才智過人,從不直接清點軍隊的人數,只要讓士兵三人一排,五人一排,七人一排地變換隊形,而每次他只掃一眼排位就知道總人數了.輸入包含多組數據,每組數據包含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組合時,貌似一眼看不出來有什麼數學公式可以馬上解決,但是我們可以用計算機暴力尋找,這叫窮舉法.
[運行結果]
[代碼] 使用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的所有取值使用三重循環。
閱讀更多 酷叮貓少兒編程 的文章