题解
【入门】小明排队做操迟到
1 条题解
-
0
解题思路
小明迟到了,他记得自己要排在第 x 学号的同学后面。现在队伍已经排好了,要把小明(学号 y)插到 x 后面。
我们可以分成三步来做:
- 先找位置:在队伍里找到学号 x 的同学在第几个位置,记下来。
- 把小明插进去:输出时,先输出 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