原题面:
题目描述:
输入格式:
输出格式:
翻译:
此翻译是本人自己翻译的,如有错误请纠正。
题目描述:
一个公共汽车,有
n
n
n 行,每行有4个座位,两两在一起,中间有一条过道。有两个人乘坐
I
O
I
IOI
IOI 公共汽车,两个人想坐在一起,问有没有每个连在一起的空位子。
输入格式:
第一行,输入一个
n
n
n 表示有多少行座位。
接下来的
n
n
n 行,每行传入5个元素,左右两边的4个表示座位,如果有人输入
′
X
′
'X'
′X′ ,如果没人输入
′
O
′
'O'
′O′ ,中间的那个元素为过道,用
′
∣
′
'|'
′∣′ 表示。
输出格式:
问你是否存在连续的两个座位没人坐,存在输出
Y
E
S
YES
YES ,并把这两个座位改为
+
+
++
++ 。 输出修改以后的情况,不存在输出
N
O
NO
NO。
注意!!!这里有一个点需要注意,题目只让你改第一个“连续的两个座位没人坐”的位置了,也就是说后面即使还有也不改了,或者你可以理解为这两个人先看到哪两个位置是空的就坐下了,不会再往后走。
代码实现:
题目理解好了,这道题就不难了。
直接上代码吧,剩下的讲解全在注释里了:
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, x = 0; //x用来判断这是不是第一个连续空位
cin >> n;
char a1[n], a2[n], a3[n], a4[n], a5[n]; //由于一行只需要5个元素,所以可以这么定义
for (int i = 0; i < n; i++) {
cin >> a1[i] >> a2[i] >> a3[i] >> a4[i] >> a5[i];
if (a1[i] == 'O' && a2[i] == 'O') { //判断连续空位
if (x == 0) { //如果x为0就说明前面没有空位
x = 1; //记录一下表明已发现一个连续空位
a1[i] = '+'; //把这两个位置换成++
a2[i] = '+';
}
} else if (a4[i] == 'O' && a5[i] == 'O') { //判断连续空位
if (x == 0) {
x = 1;
a4[i] = '+';
a5[i] = '+';
}
}
}
if (x == 0) {
cout << "NO" << endl; //for循环结束后如果n还等于0,那么就说明这个车没有连续的空位
} else {
cout << "YES" << endl;
for (int i = 0; i < n; i++) {
cout << a1[i] << a2[i] << a3[i] << a4[i] << a5[i] << endl;
}
}
return 0;
}