You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:19:06