#include<iostream>#include<cstring>usingnamespace std;char leftBalance[3][6], rightBalance[3][6], result[3][6];//可能是这里的问题--不是这里的问题 6刚刚好boolisfake(char c,bool light);intmain(){int n;
cin >> n;while(n--){for(int i =0; i <3; i++)//这里的问题,这个n代表的是有几组测试用例,而不是几行输入,没改之前是(for(int i=0;i<3;i++)){
cin >> leftBalance[i]>> rightBalance[i]>> result[i];//调试发现leftBalance[1]仍为空}for(char c ='A'; c <='L'; c++){if(isfake(c,true)){
cout << c <<" is the counterfeit coin and it is light."<< endl;break;//Todo: 为什么要加break?因为只有一个假币,找到就可跳出循环,没必要继续往下尝试了}elseif(isfake(c,false)){
cout << c <<" is the counterfeit coin and it is heavy."<< endl;break;}}}system("pause");}boolisfake(char c,bool light){//Todo: char*pleft, *pright;写在这里是不对的,因为strchr指针未归0--待定char*pleft,*pright;//反对上一行的说法,可以写在这里,这个只是一个声明语句,每次循环都重新赋值了for(int i =0; i <3; i++){if(light){//如果假币是轻的
pleft = leftBalance[i];//
pright = rightBalance[i];}else{
pright = leftBalance[i];
pleft = rightBalance[i];}switch(result[i][0]){case'u':if(strchr(pright, c)==NULL)//VS好像偷偷把strchr给include了,我都没include居然不报错returnfalse;break;case'e':if(strchr(pleft, c)||strchr(pright, c))returnfalse;break;case'd':if(strchr(pleft, c)==0)returnfalse;}}returntrue;//正难则反,好吧,其实正也不难}