【华为OD】C卷真题 100% 通过:找座位,解题思路及代码,C++代码实现

题目描述:

在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至少一个空位才允许落座。现在给出一排观众座位分布图,座位中存在已落座的观众,请计算出,在不移动现有观众座位的情况下,最多还能坐下多少名观众。

输入描述

一个数组,用来标识某一排座位中,每个座位是否已经坐人。0表示该座位没有坐人,1表示该座位已经坐人。

输出描述

整数,在不移动现有观众座位的情况下,最多还能坐下多少名观众。

示例1

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

10001

输出

1

示例2

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

0101

输出

0

备注

1<=数组长度<=10000

思路分析:

        这里的场景要考虑3种情况:位于左边边界的,位于右边边界的,位于中间的

首先得是当前位置为0,才接着去判断3种情况:

左边界,就是下标为0,且值也有为0时,下标1也是0,那么当前位置就可以置1,计数+1

中间的情况,左右两边也是0,就是下标-1,下标+1 的对应值也是0,那就当前位置值置1,计数+1

右边界,就是下标为长度-1时,只需要判断下标-1也为0时,就可以当前位置值置1,计数+1

代码实现:

#include 
#include 
using namespace std;

int main()
{
	string str;
	cin >> str;
	int count = 0;
	for (int i = 0; i < str.size(); ++i) {
		if (str[i] == '0') {
			if (i == 0 && i + 1 < str.size() && str[i + 1] == '0') {
				str[i] = '1';
				++count;
			}
			else if (i == str.size() - 1 && str[i - 1] == '0') {
				str[i] = '1';
				++count;
			}
			else if( i-1> 0 && i+1 < str.size() && str[i-1]=='0' && str[i+1]=='0'){
				str[i] = '1';
				++count;
			}
		}
	}
	cout << count << endl;
	return 0;
}

如果想看python代码实现的话,可以查看这个帖子:

【华为OD】C卷真题 100% 通过:找座位,解题思路及代码,Python代码实现-CSDN博客

你可能感兴趣的:(华为OD_ABCD真题,华为od,c语言,c++,算法,数据结构)