top1编程
← 返回题目
题解

【入门】小明排队做操迟到

1 条题解

  • 0
    @ 2026-7-31 10:02:21

    解题思路

    小明迟到了,他记得自己要排在第 x 学号的同学后面。现在队伍已经排好了,要把小明(学号 y)插到 x 后面。

    我们可以分成三步来做:

    1. 先找位置:在队伍里找到学号 x 的同学在第几个位置,记下来。
    2. 把小明插进去:输出时,先输出 x 同学和他前面的人,然后立刻输出小明的学号,最后再输出 x 后面的同学。

    这样队伍就从 n 个人变成了 n+1 个人,而且小明的位置正好在 x 后面。

    举个具体例子: 队伍是 1 8 32 56,x=32,y=23。

    • 找到 32 在第 3 个位置
    • 先输出 32 和他前面的:1 8 32
    • 插入小明:23
    • 再输出 32 后面的:56
    • 结果就是 1 8 32 23 56 ✅

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int n, x, y;
        cin >> n >> x >> y;
    
        int a[101];
        for (int i = 0; i < n; i++) cin >> a[i];
    
        // 找到学号 x 的同学的位置
        int pos = 0;
        for (int i = 0; i < n; i++) {
            if (a[i] == x) {
                pos = i;
                break;
            }
        }
    
        // 先输出 x 前面的同学
        for (int i = 0; i <= pos; i++) cout << a[i] << ' ';
        // 再插入小明
        cout << y << ' ';
        // 最后输出 x 后面的同学
        for (int i = pos + 1; i < n; i++) cout << a[i] << ' ';
        cout << endl;
    
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N),只要找一次位置,再输出一遍队伍
    • 空间复杂度:O(N),用一个数组存队伍
    • 1