分析:
对于每一枚硬币先假设它是轻的,看这样是否符合称量结果。如果符合,问题即解决。如果不符合,就假设它是重的,看是否符合称量结果。把所有硬币都试一遍,一定能找到特殊硬币。
strchr函数功能为在一个串中查找给定字符的第一个匹配之处。
函数原型为:
char *strchr(const char *str, int c),即在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。
#include<iostream>
#include<cstring>
char Left[3][7];
char Right[3][7];
char result[3][7];
bool IsFake(char c, bool light);
int main(){
using namespace std;
int t;
cin >> t;
while (t--){
for (int i = 0; i < 3; ++i)
cin >> Left[i] >> Right[i] >> result[i];
for (char c = 'A'; c <= 'L'; c++){
if (IsFake(c, true)){
cout << c << "is the counmterfeit coin and it is light." << endl;
break;
}
else if (IsFake(c, false)){
cout << c << "is the counterfeit coin and it is heavy." << endl;
break;
}
}
}
cin.get();
cin.get();
return 0;
}
bool IsFake(char c, bool light){
for (int i = 0; i < 3; ++i){
char* pLeft, *pRight;
if (light){
pLeft = Left[i];
pRight = Right[i];
}
else{
pLeft = Right[i];
pRight = Left[i];
}
switch (result[i][0])
{
case 'u':
if (strchr(pRight, c) == NULL)
return false;
break;
case'e':
if (strchr(pLeft, c) || strchr(pRight, c))
return false;
break;
case'd':
if (strchr(pLeft, c) == NULL)
return false;
break;
}
}
return true;
}