zoukankan      html  css  js  c++  java
  • WUST Online Judge

    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.
    ", c);
                    break;
                }
                else if (f(c, 1, str1, str2, str3, str)) {
                    printf("%c is the counterfeit coin and it is heavy.
    ", c);
                    break;
                }
            }
        }
        return 0;
    }
    
    作者:McR
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    angular2 如何使用animate实现动画效果
    angular2+ 组件中用@import进来的css不起作用
    ReentrantLock & AQS
    常用JDK命令
    分布式缓存
    持续交付
    持续部署
    持续集成
    领域驱动设计简介
    spring boot 整合JPA bean注入失败
  • 原文地址:https://www.cnblogs.com/mcr-tcp/p/9170521.html
Copyright © 2011-2022 走看看