問題描述
賽利有 12 枚銀幣个盆。其中有 11 枚真幣和 1 枚假幣假抄。假幣看起來和真幣沒有區(qū)別,但是重量不同踏志。但賽利不知道假幣比真幣輕還是重阀捅。于是他向朋友借了一架天平。朋友希望賽利稱三次就能找出假幣并且確定假幣是輕是重针余。例如:如果賽利用天平稱兩枚硬幣饲鄙,發(fā)現(xiàn)天平平衡,說明兩枚都是真的圆雁。如果賽利用一枚真幣與另一枚銀幣比較忍级,發(fā)現(xiàn)它比真幣輕或重,說明它是假幣伪朽。經(jīng)過精心安排每次的稱量轴咱,賽利保證在稱三次后確定假幣。
輸入
程序有多個測試塊,第一行是一個整數(shù)n嗦玖,表示有n個測試塊患雇。每次測試塊有三行,每行表示一次稱量的結果跃脊。賽利事先將銀幣標號為 A-L宇挫。每次稱量的結果用三個以空格隔開的字符串表示:天平左邊放置的硬幣 天平右邊放置的硬幣 平衡狀態(tài)。其中平衡狀態(tài)用"up''酪术,"down''器瘪,或 "even''表示, 分別為右端高、右端低和平衡绘雁。天平左右的硬幣數(shù)總是相等的橡疼。
輸出
每個測試塊輸出一行,輸出哪一個標號的銀幣是假幣庐舟,并說明它比真幣輕(light)還是重(heavy)欣除。
輸入樣列
1
ABCD EFGH even
ABCI EFJK up
ABIJ EFGH even
輸出樣例
K is the counterfeit coin and it is light.
算法實現(xiàn)
using System;
namespace Questions{
class Program{
public static void Main(string[] args){
int n = int.Parse(Console.ReadLine());
while (n!=0)
{
n--;
string input = Console.ReadLine();
string[] data1 = input.Split(' ');
input = Console.ReadLine();
string[] data2 = input.Split(' ');
input = Console.ReadLine();
string[] data3 = input.Split(' ');
char[] coin = new char[12];
string[] dataTemp= {"","","" } ;
int k = 0;
if (data1[2].CompareTo("even") == 0)
{
for (int i = 0; i < data1[0].Length; i++) {
bool flag = true;
for (int j = 0; j < k; j++) {
if (data1[0][i] == coin[j])
{
flag = false;
break;
}
}
if (flag) {
coin[k++] = data1[0][i];
}
}
}
else
dataTemp = data1;
if (data2[2].CompareTo("even") == 0)
{
for (int i = 0; i < data2[0].Length; i++)
{
bool flag = true;
for (int j = 0; j < k; j++)
{
if (data2[0][i] == coin[j])
{
flag = false;
break;
}
}
if (flag)
{
coin[k++] = data2[0][i];
}
}
}
else
dataTemp = data2;
if (data3[2].CompareTo("even") == 0)
{
for (int i = 0; i < data3[0].Length; i++)
{
bool flag = true;
for (int j = 0; j < k; j++)
{
if (data3[0][i] == coin[j])
{
flag = false;
break;
}
}
if (flag)
{
coin[k++] = data3[0][i];
}
}
}
else
dataTemp = data3;
char temp=' ';
string result="";
for (int i = 0; i < dataTemp[0].Length; i++) {
bool flag=false;
for (int j = 0; j < k; j++) {
if (dataTemp[0][i] == coin[j])
flag = true;
}
if (!flag)
{
temp = dataTemp[0][i];
result = "left";
}
}
if (result.CompareTo("") == 0) {
for (int i = 0; i < dataTemp[1].Length; i++)
{
bool flag = false;
for (int j = 0; j < k; j++)
{
if (dataTemp[1][i] == coin[j])
flag = true;
}
if (!flag)
{
temp = dataTemp[1][i];
result = "right";
}
}
}
if (dataTemp[2].CompareTo("up") == 0) {
if (result.CompareTo("right") == 0)
result = "light";
else
result = "heavy";
}
else {
if (result.CompareTo("right") != 0)
result = "light";
else
result = "heavy";
}
Console.WriteLine("{0} is the counterfeit coin and it is {1}.", temp, result);
}
Console.ReadKey();
}
}
}