Как реализовать счетчик после нахождения наибольшего значения и доступа к значению в 2D-массиве?

#c #arrays #multidimensional-array

#c #массивы #многомерный массив

Вопрос:

У меня возникли проблемы при попытке реализовать счетчик для 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 игроков, у кого общий наивысший балл. Однако у меня возникают проблемы при попытке реализовать счетчик для игрока после того, как я обнаружил, что у него самый высокий балл в заданном столбце, а также при попытке найти имя игрока.

Комментарии:

1. «У меня возникли проблемы при попытке реализовать счетчик для проигрывателя» -> вы могли бы опубликовать свой проблемный код.

Ответ №1:

Используя вашу структуру, вы можете сделать что-то вроде:

 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 (amp;player)[NUM]) {
    auto compare = [](const Playeramp; lhs, const Playeramp; rhs) {
        return lhs.best_score() < rhs.best_score();
    };

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

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