称硬币

#include<iostream>
#include<cstring>

using namespace std;
char Left[3][7];
char Right[3][7];
char result[3][7];
bool IsFake(char c, bool light);


int main()
{
    int t;
    cin >> t;
    while (t--) {
        for (int i = 0; i < 3; ++i) {
            cin >> Left[i] >> Right[i] >> result[i];
        }
        for (char c = 'A'; c <= 'L'; c++) {
            if (IsFake(c, true)) {
                cout << c << "is the counterfeit coin and it is light.\n";
                break;
            }
            else if (IsFake(c, false)) {
                cout << c << "is the counterfeit coin and it is heavy.\n";
                break;
            }
        }
    }
    return 0;
}

bool IsFake(char c, bool light)
{
    for (int i = 0; i < 3; ++i) {
        char* pLeft, * pRight;//指向天平两边的字符串
        if (light) {
            pLeft = Left[i];
            pRight = Right[i];
        }
        else {//如果假设假币是重的,则把称量结果左右对换
            pLeft = Right[i];
            pRight = Left[i];

        }
        switch (result[i][0])
        {//天平右边的情况
        case 'u':
            if (strchr(pRight, c) == NULL)
                return false;
            break;
        case 'e':
            if (strchr(pLeft, c) || strchr(pRight, c))
                return false;
            break;
        case 'd':
            if (strchr(pLeft, c) == NULL)
                return false;
            break;
        }

    }
    return true;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文章作者:Tyan博客:noahsnail.com | CSDN | 简书 1. 枚举 枚举是基于逐个尝试答案的一...
    SnailTyan阅读 921评论 0 0
  • 有12枚硬币。其中有11枚真币和1枚假币。假币和真 币重量不同,但不知道假币比真币轻还是重。现在,用一架天平称了这...
    夏天才爱睡觉阅读 828评论 0 0
  • 问题描述 赛利有 12 枚银币。其中有 11 枚真币和 1 枚假币。假币看起来和真币没有区别,但是重量不同。但赛利...
    指尖极光阅读 376评论 0 0
  • 飋飋白杨原上舞, 芦花似雪天涯路。 秋光叶赤凭栏久, 绝雁沉鱼书信负。 新韵仄起 十四姑 2016....
    不器斋主人阅读 1,640评论 54 22