POJ1013
来源:互联网 发布:银行it人 编辑:程序博客网 时间:2024/05/21 06:51
#include <stdio.h>#include <string.h>char l[3][7], r[3][7], s[3][6];int light(char c);int heavy(char c);int right(char c, int j);int left(char c, int j);int main(){ int n; scanf("%d",&n); while(n--) { scanf("%s%s%s%s%s%s%s%s%s",l[0],r[0],s[0],l[1],r[1],s[1],l[2],r[2],s[2]); char c; for(c='A';c<='L';c++) //一个一个的判断 { if(light(c)) printf("%c is the counterfeit coin and it is light.\n",c); if(heavy(c)) printf("%c is the counterfeit coin and it is heavy.\n",c); } } return 0;}int heavy(char c) //假如 c 是重的的集中情况{ int i; for(i=0;i<3;i++) { switch(s[i][0]) { case 'e': if(left(c,i)||right(c,i)) //判断 C 为轻且平衡时的情况 return 0; break; case 'u': if(!left(c,i)) //判断 C 为轻且up时的情况 return 0; break; case 'd': if(!right(c,i)) //判断 C 为轻且 down 时的情况 return 0; break; } } return 1;}int light(char c) //假如 c 是轻的需要判断的情况{ int i; for(i=0;i<3;i++) { switch(s[i][0]) { case 'e': if(left(c,i)||right(c,i)) return 0; break; case 'u': if(!right(c,i)) return 0; break; case 'd': if(!left(c,i)) return 0; break; } } return 1;}int right(char c, int j) //判断 c 是否在右边的天平中{ int i; for(i=0;i<strlen(r[j]);i++) { if(c==r[j][i]) return 1; } return 0;}int left(char c, int j) //判断 C 是否在左边的天平中{ int i; for(i=0;i<strlen(l[j]);i++) { if(c==l[j][i]) return 1; } return 0;}