大致题意:
有一打(12枚)硬币,其中有且仅有1枚假币,11枚真币
用A~L作为各个硬币的代号
假币可能比真币略轻,也可能略重
现在利用天枰,根据Input输入的3次称量,找出假币,并输出假币是轻还是重。
#include<iostream>
#include<stdio.h>
#include<string>
#include<memory>
#include<cstring>
using namespace std;
char lleft[3][7],rright[3][7],result[3][7];
bool judge(char c,bool light)
{
char *pleft,*pright;
for(int i=0; i<3; i++)
{
if(light)
{
pleft=lleft[i];
pright=rright[i];
}
else
{
pleft=rright[i];
pright=lleft[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;
}
int main()
{
int n;
cin>>n;
for(int i=0; i<n; i++)
{
for(int j=0; j<3; j++)
{
cin>>lleft[j]>>rright[j]>>result[j];
}
for(char c='A'; c<='L'; c++)
{
if(judge(c,true))
{
cout<<c<<" is the counterfeit coin and it is light."<<endl;
break;
}
if(judge(c,false))
{
cout<<c<<" is the counterfeit coin and it is heavy."<<endl;
break;
}
}
}
return 0;
}