稱硬幣
問題描述
有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右邊高...