这个题目的意思是根据三组输入信息判断出哪一个字母代表的硬币是假的,并且需要判断出是轻还是重?
解题思路:
我们可以将这个12个字母罗列出来,一个一个进行假设尝试判断,看对应的输入是否成立. 每一个字母有两种情况,因此最多总共有24种情况
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define COL 5
char left[3][COL],right[3][COL],result[3][COL];
char arr[13]="ABCDEFGHIJKL";
int lighter(char c) {
int i;
for(i=0;i<3;i++) {
if(result[i][0]=='e') {
if(!strchr(left[i],c) != !strchr(right[i],c)) return 0;
}
if(result[i][0]=='u') {
if(!strchr(right[i],c)) return 0;
}
if(result[i][0]=='h') {
if(!strchr(left[i],c)) return 0;
}
}
return 1;
}
int heavier(char c) {
int i;
for(i=0;i<3;i++) {
if(result[i][0]=='e') {
if(!strchr(left[i],c) != !strchr(right[i],c)) return 0;
}
if(result[i][0]=='h') {
if(!strchr(right[i],c)) return 0;
}
if(result[i][0]=='u') {
if(!strchr(left[i],c)) return 0;
}
}
return 1;
}
int main() {
int i;
while(1) {
memset(left,'\0',3*COL);
memset(right,'\0',3*COL);
memset(result,'\0',3*COL);
for(i=0;i<3;i++) {
scanf("%s %s %s",left[i],right[i],result[i]);
}
for(i=0;i<12;i++) {
if(lighter(arr[i])) {
printf("%c is the counterfeit coin and it is lighter\n",arr[i]);
break;
}
else printf("%c is not the counerfeit coin\n",arr[i]);
if(heavier(arr[i])) {
printf("%c is the counterfeit coin and it is heavy\n",arr[i]);
break;
}
}
}
return 1;
}