首页 > 解决方案 > 找到最高值并访问二维数组中的值后如何实现计数器?

问题描述

我一直在尝试根据用户输入的分数为游戏实现 3 名玩家的计数器以及尝试访问该玩家的姓名时遇到问题。

void winner(const string NAMES[NUM], const int SCORES[DAYS][NUM]) {
    int player1, player2, player;
    string winner
    for (int row = 0; row < DAYS; row++) {
        int max = SCORES[row][0];
        for (int col = 1; col < NUM; col++) {
            if (SCORES[row][col] > max) {
                max = SCORES[row][col];
            }
        }
    }
}

代码已经能够找到列中的最大值。我的目标是尝试在 7 天和 3 名玩家的游戏中找出总分最高的人。但是,在发现玩家在一组列中得分最高以及试图找到玩家的名字后,我在尝试为玩家实施计数器时遇到了麻烦。

标签: c++arraysmultidimensional-array

解决方案


使用您的结构,您可能会执行以下操作:

void winner(const string NAMES[NUM], const int SCORES[DAYS][NUM]) {
    int best_scores[NUM]{};

    for (int p = 0; p != NUM; ++p) {
        for (int day = 0; day != DAYS; ++day) {
            best_scores[p] = std::max(best_scores[p], SCORES[day][p]);
        }
    }
    auto best_player = std::distance(std::begin(best_scores), std::max_element(std::begin(best_scores), std::end(best_scores));

    std::cout << "winner is " << NAMES[best_player] << " with score " << best_scores[best_player] << std::endl;
}

我建议创建结构来对名称和分数进行分组。

struct Player
{
    std::string name;
    std::array<int, DAYS> scores: // or int scores[DAYS]; 

    int best_score() const { return *std::max_element(scores.begin(), scores.end());}
};

接着

void winner(const Player (&player)[NUM]) {
    auto compare = [](const Player& lhs, const Player& rhs) {
        return lhs.best_score() < rhs.best_score();
    };

    const Player& best = *std::max_element(std::begin(players), std::end(players), compare);

    std::cout << "winner is " << best.name << " with score " << best.best_score() << std::endl;
}

推荐阅读