WUST Online Judge - 2102: 称硬币

2102: 称硬币

Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lld
Submitted: 242  Accepted: 32
[Submit][Status][Web Board]

Description

12 枚硬币,其中有11枚真币和1枚假币。假币和真币重量不同,但不知道假币比真币轻还是重。

现在用一架天平称了这些币三次,告诉你称的结果,请你找出假币并且确定是轻还是重(数据保证一能出来)。

Input

多组测试数据。每组测试数据有三行,表示一次称量的结果。硬币标号为 A-L。

每次称量的结果用三个以空格隔开字符串表示:天平左边放置的硬币 天平右边放置的硬币 平衡状态。

其中平衡状态用“up”,“down”,“even”表示,分别表示右端高、右端低和左右平衡。

天平左右的硬币数总是相等。

Output

每组测试数据在一行中输出哪一个标号的硬币是假币,并说明它比真币轻(light)还是重(heavy)。

Sample Input

ABCD EFGH even
ABCI EFJK up
ABIJ EFGH even

Sample Output

K is the counterfeit coin and it is light.

代码如下:

#include <stdio.h>
#include <string.h>

int f(char c, int n, char str1[][10], char str2[][10], char str3[][10], char str[][10]) {
    int i;
    if (!n) {
        for (i = 0; i < 3; i++) {
            if (strcmp(str3[i], str[0]) == 0)
                if (strchr(str2[i], c) == NULL) return 0;
            if (strcmp(str3[i], str[1]) == 0)
                if (strchr(str1[i], c) == NULL) return 0;
            if (strcmp(str3[i], str[2]) == 0)
                if(strchr(str1[i], c) || strchr(str2[i], c)) return 0;
        }
    }
    else {
        for (i = 0; i < 3; i++) {
            if (strcmp(str3[i], str[0]) == 0)
                if (strchr(str1[i], c) == NULL) return 0;
            if (strcmp(str3[i], str[1]) == 0)
                if (strchr(str2[i], c) == NULL) return 0;
            if (strcmp(str3[i], str[2]) == 0)
                if(strchr(str1[i], c) || strchr(str2[i], c)) return 0;
        }
    }
    return 1;
}

int main() {
    int i;
    char c;
    char str[3][10] = {"up", "down", "even"};
    char str1[3][10], str2[3][10], str3[3][10];
    while (scanf("%s %s %s %s %s %s %s %s %s", str1[0], str2[0], str3[0], str1[1], str2[1], str3[1], str1[2], str2[2], str3[2]) != EOF) {
        fflush(stdin);
        for (c = 'A'; c <= 'L' ;c++) {
            if (f(c, 0, str1, str2, str3, str)) {
                printf("%c is the counterfeit coin and it is light.\n", c);
                break;
            }
            else if (f(c, 1, str1, str2, str3, str)) {
                printf("%c is the counterfeit coin and it is heavy.\n", c);
                break;
            }
        }
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/mcr-tcp/p/9170521.html