目录
题目描述
在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至少一个空位才允许落座。
现在给出一排观众座位分布图,座位中存在已落座的观众,请计算出,在不移动现有观众座位的情况下,最多还能坐下多少名观众。
输入描述
一个数组,用来标识某一排座位中,每个座位是否已经坐人。0表示该座位没有坐人,1表示该座位已经坐人。
- 1 ≤ 数组长度 ≤ 10000
输出描述
整数,在不移动现有观众座位的情况下,最多还能坐下多少名观众。
用例
输入 | 10001 |
输出 | 1 |
说明 | 无 |
输入 | 0101 |
输出 | 0 |
说明 | 无 |
题目解析
本题和华为OD机试 – 座位调整(Java & JS & Python & C)_伏城之外的博客-CSDN博客类似,解析可以看该博客。
JavaScript算法源码
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
const desk = [...(await readline())];
console.log(getResult(desk));
})();
function getResult(desk) {
let ans = 0;
for (let i = 0; i < desk.length; i++) {
if (desk[i] == "0") {
const isLeftEmpty = i == 0 || desk[i - 1] == "0";
const isRightEmpty = i == desk.length - 1 || desk[i + 1] == "0";
if (isLeftEmpty && isRightEmpty) {
ans++;
desk[i] = "1";
i++;
}
}
}
return ans;
}
Java算法源码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(getResult(sc.nextLine().toCharArray()));
}
public static int getResult(char[] desk) {
int ans = 0;
for (int i = 0; i < desk.length; i++) {
if (desk[i] == '0') {
boolean isLeftEmpty = i == 0 || desk[i - 1] == '0';
boolean isRightEmpty = i == desk.length - 1 || desk[i + 1] == '0';
if (isLeftEmpty && isRightEmpty) {
ans++;
desk[i] = '1';
i++;
}
}
}
return ans;
}
}
Python算法源码
# 输入获取
desk = list(input())
# 算法入口
def getResult():
ans = 0
i = 0
while i < len(desk):
if desk[i] == '0':
isLeftEmpty = i == 0 or desk[i - 1] == '0'
isRightEmpty = i == len(desk) - 1 or desk[i + 1] == '0'
if isLeftEmpty and isRightEmpty:
ans += 1
desk[i] = '1'
i += 1
i += 1
return ans
# 算法调用
print(getResult())
C算法源码
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 20000
int getResult(char *desk);
int main() {
char desk[MAX_SIZE];
gets(desk);
printf("%dn", getResult(desk));
return 0;
}
int getResult(char *desk) {
unsigned long long desk_size = strlen(desk);
int ans = 0;
for (int i = 0; i < desk_size; i++) {
if (desk[i] == '0') {
int isLeftEmpty = i == 0 || desk[i - 1] == '0';
int isRightEmpty = i == desk_size - 1 || desk[i + 1] == '0';
if (isLeftEmpty && isRightEmpty) {
ans++;
desk[i] = '1';
i++;
}
}
}
return ans;
}
免责声明:
1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文
评论0