POJ 1323: Game Prediction

题目在此

解题思路:手牌按从小到大排序。当前局最大手牌从 n*m 递减,如自己牌面为当前最大,胜局加 1,否则必败。

很简单的一道题,不饶舌,上代码:

#include <cstdio>
#include <algorithm>

// 存储本人手牌
int card[51];

int main() {
    int m, n, c = 1;
    while (scanf("%d %d", &m, &n) && (m || n)) {
        for (int i = 0; i < n; ++i) {
            scanf("%d", &card[i]);
        }

        std::sort(card, card + n);

        // cm 为当前局的最大手牌
        int cm = m * n;
        int won = 0, lose = 0;
        int i = n - 1;
        while (true) {
            // 如当前局最大手牌在自己手中,必赢;
            // 否则必输,cm 减 1 代表对手出掉此牌
            if (cm == card[i])
                ++won;
            else {
                ++lose;
                --cm;
            }
            // 手牌出完,游戏结束
            if (won + lose == n) {
                break;
            }

            --i, --cm;
        }

        printf("Case %d: %d\n", c, won);
        ++c;
    }

    return 0;
}

你可能感兴趣的:(算法、贪心、模拟)