Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 36206 | Accepted: 11561 |
Descriptionapp
Inputide
Outputui
Sample Inputspa
1 ABCD EFGH even ABCI EFJK up ABIJ EFGH even
Sample Outputcode
K is the counterfeit coin and it is light.
题目大意:有12枚硬币,里面有一个是假的,称三次,判断哪枚是假的,而且判断假的比真的轻仍是重。
解题方法:直接枚举,总共有24中状况,即每一枚硬币都有可能比真的轻或者重,枚举这24种状况,便可得出答案。
#include <stdio.h> #include <string.h> int main() { char str1[10], str2[10], balance[10]; int nCase, ans[25];//ans用于记录每种状况知足的次数有多少次 scanf("%d", &nCase); while(nCase--) { memset(ans, 0, sizeof(ans)); for (int i = 0; i < 3; i++) { scanf("%s%s%s", str1, str2, balance); //j等于0到11依次表示A-L中假币轻,j等于12到23依次表示A-L中假币重 for (int j = 0; j < 24; j++) { switch(balance[0]) { case 'e': { bool flag = true; //若是假币轻则在两边都应该找不到该硬币 if (j < 12) { for (int k = 0; k < strlen(str1); k++) { if (str1[k] == 'A' + j) { flag = false; } } for (int k = 0; k < strlen(str2); k++) { if (str2[k] == 'A' + j) { flag = false; } } } //若是假币重则在两边都应该找不到该硬币 else { for (int k = 0; k < strlen(str1); k++) { if (str1[k] == 'A' + j - 12) { flag = false; } } for (int k = 0; k < strlen(str2); k++) { if (str2[k] == 'A' + j - 12) { flag = false; } } } //若是两边都没找到,则说明知足条件 if (flag) { ans[j]++; } } break; case 'u': { bool flag = false; //若是左边重则轻的假币放在右边 if (j < 12) { for (int k = 0; k < strlen(str2); k++) { if (str2[k] == 'A' + j) { flag = true; } } } //若是左边重则重的假币放在左边 else { for (int k = 0; k < strlen(str1); k++) { if (str1[k] == 'A' + j - 12) { flag = true; } } } if (flag) { ans[j]++; } } break; case 'd': { bool flag = false; //若是右边重,则轻的假币放在左边 if (j < 12) { for (int k = 0; k < strlen(str1); k++) { if (str1[k] == 'A' + j) { flag = true; } } } //若是右边重,则重的假币放在右边 else { for (int k = 0; k < strlen(str2); k++) { if (str2[k] == 'A' + j - 12) { flag = true; } } } if (flag) { ans[j]++; } } break; } } } for (int i = 0; i < 24; i++) { //ans[i] == 3说明这种状况知足三次称量的结果 if (ans[i] == 3) { //假币比真币轻 if (i < 12) { printf("%c is the counterfeit coin and it is light.\n", i + 'A'); } //假币比真币重 else { printf("%c is the counterfeit coin and it is heavy.\n", i - 12 + 'A'); } break; } } } return 0; }