[PAT解题报告] 锤子剪刀布 (20)
转载 from http://tech-wonderland.net/blog/pat-basic-level-practice-1016-1020-solutions.html

解题思路: 直接模拟解决, 可能是想考察编程的基本功吧. 按照字典序, B-C-j来做的话, 代码可以更加精简一点. 下面是可以AC的代码:

#include <iostream>
#include <algorithm>

int comp(char a, char b) {
    if(a == b) return 0;
    if( ('C' == a && 'J' == b) ||
        ('J' == a && 'B' == b) ||
        ('B' == a && 'C' == b)
        )
        return 1;
    return -1;
}

int mapping(char c) {
    if('B' == c) return 0;
    if('C' == c) return 1;
    return 2; // 'J'
}

char maxChar(int chArray[3]) {
    int maxV = *std::max_element(chArray, chArray + 3);
    if(chArray[0] == maxV)
        return 'B';
    if(chArray[1] == maxV)
        return 'C';
    return 'J';
}

int main() {
    int n;
    std::cin >> n;
    char a, b;
    int iCountWin = 0;
    int iCoundEven = 0;
    int cnt1[3] = {0, 0, 0};
    int cnt2[3] = {0, 0, 0};

    for(int i = 0; i < n; ++i) {
        std::cin >> a >> b;
        int ret = comp(a, b);
        if(1 == ret) {
            ++iCountWin;
            ++cnt1[mapping(a)];
        }
        else if(0 == ret)
            ++iCoundEven;
        else {
            ++cnt2[mapping(b)];
        }
    }
    std::cout << iCountWin << ' ' << iCoundEven << ' ' << n - iCoundEven - iCountWin << std::endl;
    std::cout << n - iCoundEven - iCountWin << ' ' << iCoundEven << ' ' << iCountWin << std::endl;
    std::cout << maxChar(cnt1) << ' ' << maxChar(cnt2) << std::endl;
    return 0;
}

注意!此信息未认证,请谨慎判断信息的真实性!

全部评论
空

相关内容推荐

头像 头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 收藏 评论
分享

全站热榜

正在热议