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 名玩家的游戏中找出总分最高的人。但是,在发现玩家在一组列中得分最高以及试图找到玩家的名字后,我在尝试为玩家实施计数器时遇到了麻烦。
解决方案
使用您的结构,您可能会执行以下操作:
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;
}
推荐阅读
- serialization - IIB v9 中 DFDL 消息中的无效字符处理
- javascript - 反应本机甲板滑动器库
- java - 在 Java 中嵌入 Web 浏览器窗口 - 凹凸
- powershell - 如何从对象的规范名称中获取用户主体名称
- firebase-dynamic-links - Firebase 动态链接丢失 UTM 参数
- crystal-reports - 创建从 Crystal Reports 到 Azure Synapse Analytics 的服务原则连接
- pytorch - 如何将带有 grid_sample 的模型转换为带有 INT8 量化的 TensorRT?
- php - “SQLSTATE [42S22]:找不到列:1054 'where 子句'中的未知列 'id'
- reactjs - 在 useEffect 间隔内使用设置状态
- amazon-web-services - 错误的 Yarn 节点标签映射与 AWS EMR 机器类型