小朋友的座位号是 � n 以内的正整数,座位从左到右按照编号排开。现在给出小朋友的就坐顺序,你需要输出每个小朋友坐下时他左边和右边最近一个有小朋友的座位。如果某一边没有小朋友,输出 0 0。用c++写代码
时间: 2024-03-24 18:39:04 浏览: 56
以下是用 C++ 实现的一个解法:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> seats(n + 1, 0);
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
int left = 0, right = 0;
for (int j = x - 1; j >= 1; j--) {
if (seats[j] != 0) {
left = j;
break;
}
}
for (int j = x + 1; j <= n; j++) {
if (seats[j] != 0) {
right = j;
break;
}
}
cout << left << " " << right << endl;
seats[x] = i;
}
return 0;
}
```
该程序首先读入小朋友的总数 `n`,然后创建一个长度为 `n+1` 的数组 `seats`,用于记录每个座位上坐着的小朋友的编号,初始值都为 0。
接下来,程序开始读入小朋友的就坐顺序。对于每个小朋友,程序都会遍历他左边和右边的座位,找到最近的一个有小朋友的座位。如果左边或右边没有小朋友,就将对应的 `left` 或 `right` 值设为 0。然后输出 `left` 和 `right`,并将该小朋友的编号记录到 `seats` 数组中。
最后,程序退出。
阅读全文