称硬币

作者: 持之以蘅 | 来源:发表于2020-03-20 16:18 被阅读0次
    #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;
    }
    

    相关文章

      网友评论

          本文标题:称硬币

          本文链接:https://www.haomeiwen.com/subject/bzwjyhtx.html