稱硬幣 列舉

2021-10-02 05:38:30 字數 2099 閱讀 6102

描述

莎莉瓊斯有一打旅行者銀幣。然而,只有十一枚硬幣是真正的銀元;一枚硬幣是假的,儘管它的顏色和大小使它與真正的銀元無法區分。假幣的重量與其他硬幣不同,但薩利不知道它比真正的硬幣重還是輕。

令人高興的是,薩莉有乙個朋友,他借給她乙個非常精確的天平。這位朋友將允許薩利三次稱重以找到那枚偽幣。例如,如果莎莉稱兩枚硬幣相對,天平平衡,那麼她就知道這兩枚硬幣是真的。如果莎莉稱

乙個真正的硬幣和第三個硬幣的天平不平衡,那麼莎莉知道第三個硬幣是假的,她可以分辨它是輕的還是重的,這取決於它放置的天平分別是上公升還是下降。

通過仔細選擇她的稱量,莎莉能夠確保她能找到有三個稱量的假幣。

輸入

輸入的第一行是整數n(n>0),指定後面的情況數。每個箱子由三條輸入線組成,每個稱重一條。薩利用字母a-l.稱重的資訊將由兩串字母提供,然後是「向上」、「向下」或「偶數」。第一串字母代表左邊的硬幣,第二串,右邊的硬幣。(薩利總是把硬幣的數量放在右邊的餘額上,就像放在左邊的餘額上一樣。)第三個位置上的單詞將顯示平衡的右側是上公升還是下降,還是保持平衡。

輸出

對於每一種情況,輸出將通過它的字母來識別假幣,並判斷它是重的還是輕的。解決方案將永遠是獨一無二的。

樣例輸入

1 

abcd efgh even

abci efjk up

abij efgh even

樣例輸出

k is the counterfeit coin and it is light.
**

北美中東部1998

提交

//2020/01/16 hmj

#include

using

namespace std;

#include

char left[3]

[7];

//天平左邊硬幣

char right[3]

[7];

//天平右邊硬幣

char result[3]

[7];

//結果

bool

isfake

(char c,

bool light)

;//light為真表示假設假幣為輕,否則表示假設假幣為重

intmain()

for(

char c =

'a'; c <=

'l'; c++

)elseif(

isfake

(c,false))

}}system

("pause");

return0;

}bool

isfake

(char c,

bool light)

//light為真表示假設假幣為輕,否則表示假設假幣為重

break

;case

'e':if(

strchr

(pleft, c)

||strchr

(pright, c)

)break

;case

'd':if(

strchr

(pleft, c)

==null

)break;}

}else

//在假幣是輕的不成立的情況下再猜測假幣是重的

break

;case

'e':if(

strchr

(pleft, c)

||strchr

(pright, c)

)break

;case

'd':if(

strchr

(pright, c)

==null

)break;}

}}return

true

;}

總結

2020/01/16 hmj

列舉 稱硬幣

題目 有12枚硬幣。其中有11枚真幣和1枚假幣。假幣和真 幣重量不同,但不知道假幣比真幣輕還是重。現在,用一架天平稱了這些幣三次,告訴你稱的結果,請你找出假幣並且確定假幣是輕是重 資料保證一定能找出來 輸入第一行是測試資料組數。每組資料有三行,每行表示一次稱量的結果。銀幣標號為 a l。每次稱量的結...

(列舉 稱硬幣

有12枚硬幣。其中有11枚真幣和1枚假幣。假幣和真 幣重量不同,但不知道假幣比真幣輕還是重。現在,用一架天平稱了這些幣三次,告訴你稱的結果,請你.找出假幣並且確定假幣是輕是重 資料保證一定能找 出來 輸入樣例 1 1組測試資料,每組測試資料有三行 abcd efgh even even平,up右邊高...

M 列舉型別 稱硬幣問題

稱硬幣 問題描述 有12枚硬幣。其中有11枚真幣和1枚假幣。假幣和真 幣重量不同,但不知道假幣比真幣輕還是重。現在,用一架天平稱了這些幣三次,告訴你稱的結果,請你 找出假幣並且確定假幣是輕是重 資料保證一定能找 出來 輸入 每組資料有三行,每行表示一次稱量的結果。銀幣標號 為a l。每次稱量的結果用...