M 列舉型別 稱硬幣問題

2021-09-01 13:27:03 字數 1290 閱讀 7214

稱硬幣

問題描述

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

輸入    

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

輸出   

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

輸入樣例 

1  abcd efgh even  

abci efjk up  

abij efgh even

輸出樣例 

k is the counterfeit coin and it is light.

解題思路:

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

**:#include

#include>

int main()

}if(s==3)//3次迴圈下來如果 s的初值不變說明3個條件都滿足則輸出,程式結束。 

else//如果s的值變了說明不滿足條件,將s修改為初始值方便對下一枚硬幣進行判斷 

for(i=0;i<3;i++)//假設是重的 

}if(k==3)//k仍然為初值3,輸出,程式結束 。 

else//初值改變,還原為預設初值。 }}

}這是我首次想到的實現方法,比較繁瑣。

標準答案:

#include

#include

using namespace std;

char left[3][7];

char right[3][7];

char result[3][7];

bool isfake(char c, bool light);

int main()

for(char c='a'; c<='l'; c++)

else if(isfake(c, false))}}

return 0;

}bool isfake(char c, bool light)

else

switch(result[i][0])

}return true;

}

稱硬幣 列舉

描述 莎莉瓊斯有一打旅行者銀幣。然而,只有十一枚硬幣是真正的銀元 一枚硬幣是假的,儘管它的顏色和大小使它與真正的銀元無法區分。假幣的重量與其他硬幣不同,但薩利不知道它比真正的硬幣重還是輕。令人高興的是,薩莉有乙個朋友,他借給她乙個非常精確的天平。這位朋友將允許薩利三次稱重以找到那枚偽幣。例如,如果莎...

列舉 稱硬幣

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

(列舉 稱硬幣

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