满意答案
#include
#include
/* lf:left side; rt:right side; ans:up/down/equal */
char lf[3][7], rt[3][7], ans[3][6];
bool isLight(char);
bool isHeavy(char);
int main()
{
//freopen("dat.txt", "r", stdin);
int tc;
scanf("%d", &tc);
//测试的数据的组数
while(tc--){
for(int i = 0; i
scanf("%s %s %s", lf[i], rt[i], ans[i]);
for(int i = 0; i
char cur = 'A' + i;
/* 假设硬币cur是重的,看是否满足输入数据 */
if(isHeavy(cur))
printf("%c is the counterfeit coin and it is heavy.\n", cur);
/* 否则,假设硬币cur是重的,看是否满足输入数据 */
else if(isLight(cur))
printf("%c is the counterfeit coin and it is light.\n", cur);
}
}
return 0;
}
bool isLight(char cur)
{
for(int i = 0; i
switch(ans[i][0]) {
/* 假设假币偏轻时,若右侧为up,则假币必在右侧;若两边平衡,则假币必不在两侧;若右侧为down,则假币必在左侧 */
case 'u' : if(strchr(rt[i], cur) == NULL) return false;
break;
case 'e' : if(strchr(lf[i], cur) != NULL ||
strchr(rt[i], cur) != NULL) return false;
break;
case 'd' : if(strchr(lf[i], cur) == NULL) return false;
break;
}
}
return true;
}
bool isHeavy(char cur)
{
for(int i = 0; i
switch(ans[i][0]) {
/* 假设假币偏重时,若右侧为up,则假币必在右左侧;若两边平衡,则假币必不在两侧;若右侧为down,则假币必在右侧 */
case 'u' : if(strchr(lf[i], cur) == NULL) return false;
break;
case 'e' : if(strchr(lf[i], cur) != NULL || strchr(rt[i], cur) != NULL) return false;
break;
case 'd' : if(strchr(rt[i], cur) == NULL) return false;
break;
}
}
return true;
}
昨天才做的一个称假币问题 你看看
00分享举报