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; }