C++实现:如何从球队列表中显示积分最低的后3支球队
如何筛选并显示积分最低的后3支球队
嘿,我来帮你搞定这个需求!你当前的代码只是找到了单一的最低积分值,但要实现显示积分最低的后3支球队,得调整思路——毕竟可能有多支球队积分相同,而且我们需要的是排名倒数的三个,不只是最低分的那一个。下面给你两种实用的方案:
方案1:直接排序后取前3名(直观易实现)
如果允许修改原数组的顺序,直接对球队按积分升序排序,排序完成后前3个元素就是积分最低的球队(如果球队总数不足3,就显示全部)。示例代码如下:
// 假设你的球队类型是Team,league是存储球队的数组 sort(league, league + numTeams, [](const Team& a, const Team& b) { // 按积分升序排列,积分低的在前 return a.GetPoints() < b.GetPoints(); }); // 确定要显示的数量:最多3个,若球队不足3则显示全部 int showCount = min(numTeams, 3); for (int i = 0; i < showCount; i++) { cout << "球队名称:" << league[i].GetName() << ",积分:" << league[i].GetPoints() << endl; }
方案2:不修改原数组,通过索引映射筛选
如果不想打乱原数组的顺序,可以先把每个球队的积分和对应的索引存起来,排序这个索引列表后再从原数组中取对应球队:
#include <vector> #include <algorithm> // 存储(积分,球队索引)的配对 vector<pair<int, int>> pointIndexPairs; for (int i = 0; i < numTeams; i++) { pointIndexPairs.emplace_back(league[i].GetPoints(), i); } // 按积分升序排序这个配对列表 sort(pointIndexPairs.begin(), pointIndexPairs.end()); // 输出前3个对应的球队 int showCount = min(numTeams, 3); for (int i = 0; i < showCount; i++) { int teamIndex = pointIndexPairs[i].second; cout << "球队名称:" << league[teamIndex].GetName() << ",积分:" << league[teamIndex].GetPoints() << endl; }
为什么你原来的代码不够用?
你之前的循环只找到了单一的最低积分值,但无法处理以下情况:
- 有多支球队都是这个最低积分
- 需要同时展示倒数第二、第三低的积分球队
这两种方案都能完美覆盖这些场景,还能处理球队数量不足3的边界情况,避免数组越界问题。
内容的提问来源于stack exchange,提问作者T.Ryan
相关产品推荐
相关产品推荐

