当前位置: 首页 > news >正文

算法练习题27——疫情下的电影院(模拟)

其实思路还好 就是输入有点难搞

Java

import java.util.ArrayList;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String input = scanner.nextLine();// 去掉输入字符串的方括号if (input.startsWith("[")) input = input.substring(1);if (input.endsWith("]")) input = input.substring(0, input.length() - 1);// 分割输入字符串并将其转换为整数列表String[] items = input.split(",");ArrayList<Integer> numbers = new ArrayList<>();for (String item : items) {numbers.add(Integer.parseInt(item.trim()));  // 去除多余空格并转换为整数}int n = numbers.size();int count = 0;// 遍历座位列表,计算可以安排的最大人数for (int i = 0; i < n; i++) {if (numbers.get(i) == 0) {boolean flag = true;// 检查前两个座位if (i > 0 && numbers.get(i - 1) == 1) {flag = false;}if (i > 1 && numbers.get(i - 2) == 1) {flag = false;}// 检查后两个座位if (i < n - 1 && numbers.get(i + 1) == 1) {flag = false;}if (i < n - 2 && numbers.get(i + 2) == 1) {flag = false;}// 如果该座位可以安排,计数并将其标记为已占用if (flag) {count++;numbers.set(i, 1);  // 将当前座位设置为已占用}}}// 输出可以安排的最大人数System.out.println(count);}
}
1.input.startsWith("[")
  • startsWith 是 Java String 类的一个方法,用于检查字符串是否以指定的字符或子字符串开始。
  • 如果 input 字符串以字符 [ 开头,input.startsWith("[") 返回 true
  • 当条件为 true 时,input = input.substring(1) 会被执行。
2. input.substring(1)
  • substring 是 Java String 类的另一个方法,返回一个新的字符串,这个字符串是从指定的起始位置(以 0 为基数)开始,直到原字符串的末尾。
  • input.substring(1) 表示从字符串的第二个字符(索引 1)开始,截取到字符串末尾。这样就去掉了第一个字符 [
  • 例如,"[1, 0, 0, 1]".substring(1) 将会返回 "1, 0, 0, 1]"
3. input.endsWith("]")
  • endsWith 方法用于检查字符串是否以指定的字符或子字符串结束。
  • 如果 input 字符串以字符 ] 结束,input.endsWith("]") 返回 true
  • 当条件为 true 时,input = input.substring(0, input.length() - 1) 会被执行。
4. input.substring(0, input.length() - 1)
  • input.length() 返回字符串的长度。
  • substring(0, input.length() - 1) 表示从字符串的第一个字符(索引 0)开始,截取到倒数第二个字符(索引为 length - 1 的字符不包括在内)。
  • 这样做的目的是去掉字符串最后一个字符 ]
  • 例如,"1, 0, 0, 1]".substring(0, input.length() - 1) 将返回 "1, 0, 0, 1"
5.split() 方法
  • split() 是 Java 中 String 类的一个方法,用于根据指定的正则表达式将字符串分割为一个字符串数组。
  • 参数 "," 代表以逗号作为分隔符。
  • 这个方法会扫描 input 字符串中的所有逗号,并在每个逗号处分割,返回一个字符串数组 items
6.trim() 方法
  • trim() 是 String 类的一个方法,用于去除字符串两端的空白字符(包括空格、制表符等)。
  • 它不会改变字符串中间的空格,只去除两端的空白字符。
为什么需要 trim()
  • 当你从输入中读取数据时,有时候每个元素之间可能会有多余的空格,比如 input = "1, 2, 0 , 1"。通过 split(",") 分割后,会得到像 " 2" 这样的字符串,这个字符串中有空格。
  • 使用 trim() 可以去掉这些多余的空格,确保你只处理纯数字部分。
示例
  • " 2 ".trim() 会返回 "2"
  • "0 ".trim() 会返回 "0"

C++ ihate

#include <bits/stdc++.h>
using namespace std;int main() {string input;getline(cin, input);// 去除前后的方括号if (!input.empty() && input[0] == '[') input.erase(input.begin());if (!input.empty() && input.back() == ']') input.pop_back();// 解析输入为整数向量vector<int> numbers;stringstream ss(input);string item;// 用一个简单的字符串流来分割和转换while (getline(ss, item, ',')) {numbers.push_back(stoi(item));  // 直接使用 stoi 转换为整数}int n = numbers.size();int count = 0;for (int i = 0; i < n; i++) {if (numbers[i] == 0) {bool flag = true;// 检查当前位置前面两个 if (i > 0 && numbers[i - 1] == 1) {flag = false;}if (i > 1 && numbers[i - 2] == 1) {flag = false;}// 检查当前位置后面两个 if (i < n - 1 && numbers[i + 1] == 1) {flag = false;}if (i < n - 2 && numbers[i + 2] == 1) {flag = false;}if (flag) {count++;numbers[i] = 1;}}}cout << count << endl;return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • OpenStack × OceanBase: 打造高可用可扩展的基础设施平台
  • [OpenCV] 数字图像处理 C++ 学习——15像素重映射(cv::remap) 附完整代码
  • Ruoyi Cloud K8s 部署
  • 汇编调用C库函数—printf、scanf和Win32API
  • 俄罗斯方块——C语言实践(Dev-Cpp)
  • Unity 特殊文件夹
  • 面试题总结(四) -- STL与算法篇
  • TI DSP下载器XDS100 V2.0无法使用问题
  • MATLAB 从 R2024B 开始支持树莓派 5
  • 【C++】模板进阶:深入解析模板特化
  • 【C++题目】1.日期差值
  • C/C++内存管理——内存泄漏/内存碎片
  • 揭秘LLM计算数字的障碍的底层原理
  • 图论篇--代码随想录算法训练营第五十八天打卡|拓扑排序,dijkstra(朴素版),dijkstra(堆优化版)精讲
  • 洛谷9.16
  • Flannel解读
  • HashMap剖析之内部结构
  • php面试题 汇集2
  • python3 使用 asyncio 代替线程
  • Python利用正则抓取网页内容保存到本地
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • VUE es6技巧写法(持续更新中~~~)
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 给初学者:JavaScript 中数组操作注意点
  • 前嗅ForeSpider中数据浏览界面介绍
  • 深入浏览器事件循环的本质
  • 微服务核心架构梳理
  • 微信小程序设置上一页数据
  • 携程小程序初体验
  • 一个JAVA程序员成长之路分享
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 原生 js 实现移动端 Touch 滑动反弹
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #Spring-boot高级
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (26)4.7 字符函数和字符串函数
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (4.10~4.16)
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (四)Linux Shell编程——输入输出重定向
  • (四)鸿鹄云架构一服务注册中心
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)VC++中ondraw在什么时候调用的
  • (转)四层和七层负载均衡的区别
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 8.0 中有哪些新的变化?
  • .NET C# 操作Neo4j图数据库
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .Net Winform开发笔记(一)
  • .net 流——流的类型体系简单介绍
  • .NET开源、简单、实用的数据库文档生成工具