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

news2024/9/25 17:14:12

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

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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2138060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从大脑图谱/ROI中提取BOLD信号

动机 在功能连接&#xff08;Functional Connectivity&#xff0c;FC&#xff09;构建过程中&#xff0c;由于FC中元素数目是节点数目的平方关系&#xff0c;所以在计算FC之前进行数据降维是一个常见的选择。 一般会将体素级/顶点级BOLD信号&#xff08;在2mm的图像分辨率下大脑…

Python实现一个轮盘抽奖功能(完整代码)

运行后代码图片 python的gui模块 python常用的图形库tkinter、wxpython、pyqt。 tkinter是python自带的图形库&#xff0c;Tkinter 可以在大多数的 Unix 平台下使用&#xff0c;同样可以应用在 Windows 和 Macintosh 系统里。 wxPython 是一款开源软件&#xff0c;是 Python…

C++进阶:多态

✨✨所属专栏&#xff1a;C✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ 多态的概念 多态(polymorphism)的概念&#xff1a;通俗来说&#xff0c;就是多种形态。多态分为编译时多态(静态多态)和运⾏时多态(动态多态)&#xff0c;这⾥我们重点讲运⾏时多态。 编译时多态(静态多态)主…

一口气学完docker【入门到精通】

一、容器 1、什么是容器 容器是一种轻量级的虚拟化技术&#xff0c;它为应用程序提供了一种隔离的运行环境。在操作系统级别上实现&#xff0c;容器将应用程序及其所有依赖项&#xff08;包括库、配置文件等&#xff09;封装在一起&#xff0c;形成一个独立的标准单元。 每个…

[数据结构]二叉搜索树

今天我们来学习一下新的数据结构&#xff0c;二叉搜索树&#xff0c;这个结构比较简单&#xff0c;是一个铺垫式的结构&#xff0c;为之后的平衡二叉树&#xff0c;AVL树以及红黑树做一个知识基础&#xff0c;我们将从概念到实现具体的介绍二叉搜索树。 目录 Ⅰ.二叉搜索树的…

比亚迪电动汽车的市场占比太惊人

比亚迪&#xff08;BYD&#xff09;在中国电动汽车市场的崛起无疑是近年来最显著的现象之一。凭借其强大的技术整合、丰富的产品线以及价格优势&#xff0c;比亚迪已经迅速成为中国乃至全球电动汽车领域的领导者。在2024年&#xff0c;比亚迪的市场份额在中国汽车市场达到了惊人…

什么是上拉,下拉?

上拉就是将引脚通过一个电阻连接到电源&#xff0c;作用&#xff1a;1.使IO口的不确定电平稳定在高点平&#xff0c;2、为了增加IO口拉电流的能力。 下拉就是将引脚通过一个电阻与GND相连&#xff0c;作用&#xff1a;1.从器件输出电流 2.当IO口为输入状态时&#xff0c;引脚的…

Redhat 8,9系(复刻系列) 一键部署Oracle23ai rpm

Oracle23ai前言 Oracle Database 23ai Free 让您可以充分体验 Oracle Database 的能力,世界各地的企业都依赖它来处理关键任务工作负载。 Oracle Database Free 的资源限制为 2 个 CPU(前台进程)、2 GB 的 RAM 和 12 GB 的磁盘用户数据。该软件包不仅易于使用,还可轻松下载…

适合学生党开学买的蓝牙耳机?分享开放式耳机排行榜前十名

学生党开学想买耳机的话&#xff0c;我觉得比较适合入手开放式耳机&#xff0c;因为这类耳机佩戴舒适度高&#xff0c;长时间使用也不会感到不适或疲劳&#xff0c;同时保持耳道干爽透气&#xff0c;更加健康卫生&#xff0c;还能提供自然、开阔的音场&#xff0c;音质表现优秀…

详解c++多态---上

virtual关键字 1.可以修饰原函数&#xff0c;为了完成虚函数的重写&#xff0c;满足多态的条件之一。 class Person { public:virtual void BuyTicket() { cout << "买票-全价" << endl; } };class Student : public Person { public:virtual void Buy…

NarratoAI利用AI大模型,一键解说并剪辑视频

测试视频: 字幕/配乐后期添加的,视频由NarratoAI自动生成的 雪迷宫-NarratoAI利用AI大模型剪辑解说视频测试 WIN整合包 下载链接&#xff1a;https://pan.quark.cn/s/8f54ef99e3fb 使用前先更新&#xff0c;运行update.bat Gemini API Key 访问 https://aistudio.google.c…

性能测试-jmeter的控制器(十六)

一、if控制器 需求&#xff1a;使用“用户自定义变量”定义name变量&#xff0c;值可以是“baidu”或“itcast”,使用变量值&#xff0c;控制是否访问对应网站。 1、步骤&#xff1a; 在测试计划中添加用户定义的变量name,取值可为baidu或itcast添加两个http请求&#xff1a…

Docker突然宣布:涨价80%

从11月15日起&#xff0c;Docker的付费订阅中Pro和Team的价格都将大幅上调&#xff1a;Pro从原来的5美元每月激增到9美元每月&#xff0c;直接涨了80%&#xff1b;而Team也从之前的9美元每月来到15美元每月&#xff0c;涨价66.7%。只有Business保持此前的24美元每月不变。 同时…

S32K3 工具篇6:如何将RTD EB工程导入到S32DS

S32K3 工具篇6&#xff1a;如何将RTD EB工程导入到S32DS 1. MCAL_Plugins->Link Source Resource Filters2. Includes3. Preprocessor4. Linker5. optimization6. main.c 这个主题实际上&#xff0c;之前已经有多人写过&#xff0c;并且写的很好&#xff0c;只是实际操作中&…

基础物理-直线运动2

2-1 位置、位移和平均速度 位置与位移 为了确定物体的位置&#xff0c;通常需要相对于某个参考点来测量&#xff0c;这个参考点通常是某个坐标轴的原点&#xff08;或零点&#xff09;&#xff0c;如图 2-1 中的 x 轴。坐标轴的正方向是坐标增大的方向&#xff0c;在图 2-1 中…

微信h5跳转小程序wx-open-launch-weapp开放标签不显示(已解决)

前言&#xff1a;  前几天成功对接了跳转第三方小程序的功能&#xff0c;今天有个页面有需要对接。但是奇怪的是用的和上次一模一样的配置&#xff0c;但就是死活不显示wx-open-launch-weapp这个开放标签的按钮&#xff0c;看不到任何效果&#xff08;这个问题真的是让人欲哭无…

Docker基础命令汇总,小白必备

1、docker信息概览 docker info容器的数量 在运行的容器 暂停状态的容器 停止状态的容器 容器的镜像数量 系统的内核版本 操作系统centos 7 操作系统类型 linux 系统架构为64位 系统的cpu核心2个 总内存1.777G docker镜像仓库地址 南京大学 中国科技大 网易 百度云 腾讯云 …

C++入门基础知识69(高级)——【关于C++ 动态内存】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 异常处理的相关内容&#xff01; 目录…

【AWDP】 AWDP 赛制详解应对方法赛题实践 量大管饱

文章首发于【先知社区】&#xff1a;https://xz.aliyun.com/t/15535 一、AWDP概述 AWDP是什么 AWDP是一种综合考核参赛团队攻击、防御技术能力、即时策略的攻防兼备比赛模式。每个参赛队互为攻击方和防守方&#xff0c;充分体现比赛的实战性、实时性和对抗性&#xff0c;对参…