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

C++不使用标准库如何按得分降序输出非零得分的玩家编号

实现思路

你现在的代码只对得分数组做了排序,排序后丢失了得分和原始玩家编号的对应关系,只要做两个小调整就能满足需求:

  • 新增一个长度为8的玩家编号数组,初始值按顺序存0~7,每个位置和得分数组的位置一一对应
  • 冒泡排序交换两个得分的同时,同步交换两个得分在编号数组里对应的值,保证排序后两个数组的位置始终对应
  • 排序完成后遍历数组,只输出得分不为0的位置对应的编号值即可
完整可运行代码
#include <iostream>
using namespace std;

int main ()
{
    const int PLAYER_CNT = 8;
    int scores[PLAYER_CNT];
    int player_ids[PLAYER_CNT];
    // 初始化玩家编号数组同时读入得分
    for (int i = 0; i < PLAYER_CNT; i++) {
        player_ids[i] = i;
        cin >> scores[i];
    }
        
    // 冒泡排序按得分降序排列,同步交换对应玩家编号
    for (int i = 0; i < PLAYER_CNT - 1; i++) {
        for (int j = i + 1; j < PLAYER_CNT; j++) {
            if (scores[i] < scores[j]) {
                // 交换得分
                int temp_score = scores[i];
                scores[i] = scores[j];
                scores[j] = temp_score;
                // 同步交换对应的玩家编号
                int temp_id = player_ids[i];
                player_ids[i] = player_ids[j];
                player_ids[j] = temp_id;
            }
        }
    }

    // 按要求格式输出得分不为0的玩家编号
    bool first_output = true;
    for (int i = 0; i < PLAYER_CNT; i++) {
        if (scores[i] != 0) {
            if (!first_output) {
                cout << "、";
            }
            cout << player_ids[i];
            first_output = false;
        }
    }
    cout << endl;
    return 0;
}
代码说明
  • 把原代码里未定义的N、M替换成了明确的玩家数量常量PLAYER_CNT,避免编译错误
  • 排序逻辑保留了你原本使用的冒泡排序,没有引入任何标准库排序接口,符合需求限制
  • 输出逻辑增加了分隔符控制,不会在末尾多出多余顿号,和示例输出格式完全一致

内容的提问来源于stack exchange,提问作者teki2021

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:57:02