描述
莎莉瓊斯有一打旅行者銀幣。然而,只有十一枚硬幣是真正的銀元;一枚硬幣是假的,儘管它的顏色和大小使它與真正的銀元無法區分。假幣的重量與其他硬幣不同,但薩利不知道它比真正的硬幣重還是輕。
令人高興的是,薩莉有乙個朋友,他借給她乙個非常精確的天平。這位朋友將允許薩利三次稱重以找到那枚偽幣。例如,如果莎莉稱兩枚硬幣相對,天平平衡,那麼她就知道這兩枚硬幣是真的。如果莎莉稱
乙個真正的硬幣和第三個硬幣的天平不平衡,那麼莎莉知道第三個硬幣是假的,她可以分辨它是輕的還是重的,這取決於它放置的天平分別是上公升還是下降。
通過仔細選擇她的稱量,莎莉能夠確保她能找到有三個稱量的假幣。
輸入
輸入的第一行是整數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。每次稱量的結果用...