GESP 四级 · GESP 202512 C++ 四级 第 12 题

选择题 · 答案 A

← 整套速查表 GESP 四级 全部真题

题目

某游戏的排行榜系统需要实时更新玩家分数。每次只有一个玩家的分数发生变化,排行榜已经是按分数降序排列的。现在需要将更新后的玩家调整到正确位置。下面的函数 updateRanking() 要实现上述功能,则两处横线上应分别填写( )。

struct Player {
    string name;
    int score;
};

// 玩家索引 playerIdx 的分数刚刚更新,需要调整位置
void updateRanking(Player players[], int size, int playerIdx) {
    Player updatedPlayer = players[playerIdx];

    if (playerIdx > 0 && updatedPlayer.score > players[playerIdx - 1].score) {
        int i = playerIdx;
        while (____________________) {  // 在此处填入代码
            players[i] = players[i - 1];
            i--;
        }
        players[i] = updatedPlayer;
    }
    else if (playerIdx < size - 1 && updatedPlayer.score < players[playerIdx + 1].score) {
        int i = playerIdx;
        while (____________________) {  // 在此处填入代码
            players[i] = players[i + 1];
            i++;
        }
        players[i] = updatedPlayer;
    }
}

A.

i > 0 && updatedPlayer.score > players[i - 1].score
i < size - 1 && updatedPlayer.score < players[i + 1].score

B.

i < size - 1 && updatedPlayer.score < players[i + 1].score
i > 0 && updatedPlayer.score > players[i - 1].score

C.

i > 0 && updatedPlayer.score < players[i - 1].score
i < size - 1 && updatedPlayer.score < players[i + 1].score

D.

i > 0 && updatedPlayer.score < players[i - 1].score
i < size - 1 && updatedPlayer.score > players[i + 1].score
答案:A

解题思维

答案A。代码补全要考虑参数传递方式。如果需要修改实参,需用指针(*)传递。排序算法要理解每步比较的含义。

常见错误

排序代码补全要理解每步比较的含义。选择排序找最小值时比较的是array[min]>array[j]。

详细解析(节选)

【考点】排序逻辑|边界判断|循环条件

1. 🎯 考纲定位

GESP 四级 C++ 算法模块,考查「有序数组中插入/移动元素」这一典型场景。命题人卡住的是学生只背「while 条件怎么写」,却不懂为什么要这样写——很多人会用 players[i].score 去和 players[i-1].score 比,混淆了「移动方向」与「比较对象」,导致两个 while 条件写反。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断