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
相关产品推荐
相关产品推荐

