列舉 假幣問題

2022-03-24 07:44:41 字數 2219 閱讀 6368

有12枚硬幣。其中有11枚真幣和1枚假幣。假幣和真幣重量不同,但不知道假幣比真幣輕還是重。現在,用一架天平稱了這些幣三次,告訴你稱的結果,請你找出假幣並且確定假幣是輕是重(資料保證一定能找出來)。

輸入:第一行是測試資料組數。每組資料有三行,每行表示一次稱量的結果。銀幣標號為a-l。每次稱量的結果用三個以空格隔開的字串表示:天平左邊放置的硬幣 天平右邊放置的硬幣 平衡狀態。其中平衡狀態用``up'', ``down'', 或 ``even''表示, 分別為右端高、右端低和平衡。天平左右的硬幣數總是相等的。

輸出:輸出哪乙個標號的銀幣是假幣,並說明它比真幣輕還是重。

輸入樣例

1abcd efgh even

abci efjk up

abij efgh even

輸出樣例

k is the counterfeit coin and it is light.

解題思路:對於每一枚硬幣先假設它是輕的,看這樣是否符合稱量結果。如果符合,問題即解決。如果不符合,就假設它是重的,看是否符合稱量結果。把所有硬幣都試一遍,一定能找到特殊硬幣。

"""

輸入樣例

1abcd efgh even

abci efjk up

abij efgh even

輸出樣例

k is the counterfeit coin and it is light.

"""#輸入測試資料時,是一行一行輸入的,沒有實現整行一次輸入,需要優化

list =

def getinputlist():

groupnum = int(input("請輸入測試資料組數:"))

for i in range(3):

#假設球是輕的情況,對輸入的測量資料都應該滿足,如果不滿足,則假設不成立

def isfakelight(c):

for j in range(3):

if list[j][2][0] == 'u':

if list[j][1].find(c) < 0:

return false

break

if list[j][2][0] == 'e':

if list[j][0].find(c) >= 0 or list[j][1].find(c) >= 0:

return false

break

if list[j][2][0] == 'd':

if list[j][0].find(c) < 0:

return false

break

return true

#假設球是重的情況

def isfakeweight(c):

for j in range(3):

if list[j][2][0] == 'u':

if list[j][0].find(c) < 0:

return false

break

if list[j][2][0] == 'e':

if list[j][0].find(c) >= 0 or list[j][1].find(c) >= 0:

return false

break

if list[j][2][0] == 'd':

if list[j][1].find(c) < 0:

return false

break

return true

def main():

#input("請輸入三組資料,每組資料以空格間隔:").split()

getinputlist()

for i in range(65,77): #遍歷a--m,因為需要遍歷到l字母,所以寫m

#從a-l逐個列舉驗證

#如果本枚假幣是輕的情況,對輸入的3個測量結果都成立,則輸出該枚硬幣

if isfakelight(chr(i)):

print("%c is the counterfeit coin and it is light." %i)

break

# 如果本枚假幣是重的情況,對輸入的3個測量結果都成立,則輸出該枚硬幣

if isfakeweight(chr(i)):

print("%c is the counterfeit coin and it is weight." % i)

break

if __name__=="__main__":

main()

POJ1013假幣問題 列舉

題幹 一共十二枚銀幣,一枚假的,注意就一枚是假的,假幣重量與真幣不同。通過三次稱重來判別真假硬幣,並判斷比真的輕還是重,測量結果,up,down,even分別表示右盤輕了,右盤重了,平衡。硬幣用a l表示 解題思路 列舉假設硬幣是輕的,看是否符合每乙個測量結果,符合這枚硬幣就是假硬幣,輕 否則假設硬...

求解查詢假幣問題

二分 include include include define max 100 int a max int n intsum int low,int high return sum int solve int low,int high if low high 1 int mid low high...

HPU 1042 假幣問題

時間限制 1 sec記憶體限制 128 mb 提交 200解決 34統計 居然有假幣!事情是這樣的,現在豬肉漲了,但是農民的工資卻不見漲啊,沒錢怎麼買豬肉啊。老王這就去買豬肉,結果找來的零錢中有假幣!可惜老王一不小心把它混進了一堆真幣裡面去了。現在知道假幣的重量比真幣的質量要輕。給你乙個天平,請用最...