赞
踩
题目:
在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至
少一个空位才允许落座。现在给出一排观众座位分布图Q,座位中存在已落座的观众,请计
算出,在不移动现有观众座位的情况下,最多还能坐下多少名观众。
输入描述
一个数组,用来标识某一排座位Q中,每个座位是否已经坐人。o表示该座位没有坐人,1表
示该座位已经坐人。
输出描述
整数,在不移动现有观众座位的情况下,最多还能坐下多少名观众。
示例1输入输出Q示例仅供调试,后台判题数据一般不包含示例
输入
10001
输出
1
示例2
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
0101
输出
0
备注
1<=数组长度<=10000
题解:
这个可以将字符串变为char型数组,然后判断条件就是在中间位置的时候 第i-1位,i位,i+1位都是0,然后将第i位变成1继续判断。
其中两个边界的特殊情况,开始1,2位都是0,那么这种情况可以直接将第一个变为1
另外就是倒数第3位是1,但倒数第2,1位是0,可以将最后一个变为1.
按照这个逻辑计算就可以了。
- import java.util.Scanner;
-
- public class FindSeat {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- String posStr = sc.nextLine();
- int count = 0;
- char[] posCharArr = new char[posStr.length()];
-
- for (int i = 0; i < posStr.length(); i++) {
- posCharArr[i] = posStr.charAt(i);
- }
-
- for (int i = 0; i < posStr.length(); i++) {
- if (i == 0 && posCharArr[i] == '0' && posCharArr[i + 1] == '0') {
- count++;
- posCharArr[i] = '1';
- continue;
- }
- if (posStr.length() <= 1) {
- continue;
- }
- if (i > 0 && i < posStr.length() - 2 && posCharArr[i] == '0' //中间位置判断,这个时候i>0,因为i=0那种特殊情况前面已经判断了
- && posCharArr[i - 1] == '0' && posCharArr[i + 1] == '0') {
- count++;
- posCharArr[i] = '1';
- continue;
- }
-
- if (i == posStr.length() - 2 && posCharArr[i] == '0'
- && posCharArr[i - 1] == '1' && posCharArr[i + 1] == '0') {
- count++;
- posCharArr[i + 1] = '1';
- continue;
- }
- }
-
- System.out.println(count);
- }
- }
验证:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。