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

算法练习题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;
}


http://www.kler.cn/news/306581.html

相关文章:

  • AI辅助癌症诊断取得了进展
  • Angular面试题一
  • 大模型 LLM(Large Language Models)如今十分火爆,对于初入此领域的新人小白来说,应该如何入门 LLM 呢?是否有值得推荐的入门教程呢?
  • 深度学习自编码器 - 引言篇
  • java基于PDF底层内容流的解析对文本内容进行编辑
  • 象过河手机进销存,外出办公更方便,随时了解经营情况
  • C# 静态static
  • 基于HTML5的下拉刷新效果
  • 如何避免长距离遗忘问题
  • HarmonyOS NEXT 封装实现好用的网络模块(基于最新5.0的API12)
  • Android 12 Launcher3 去掉Hotseat
  • JVM 调优篇7 调优案例3- gc overhead limit exceed
  • ListBox显示最新数据、左移和右移操作
  • K8s中HPA自动扩缩容及hml
  • idea2024.2永久使用
  • MFC工控项目实例之十五定时刷新PC6325A模拟量输入
  • HTML添加文字
  • 【深度学习】Pytorch基础
  • 分享一些成功的 SQL 优化案例
  • 2024工业机器视觉产业现状
  • 多模态大语言模型综述(中)-算法实用指南
  • 如何在Django中创建新的模型实例
  • MFC工控项目实例之十六输入信号验证
  • app抓包 chrome://inspect/#devices
  • 2024.9.12(k8s环境搭建2)
  • WebSocket vs. Server-Sent Events:选择最适合你的实时数据流技术
  • VUE3中ref与reactive
  • Sentinel 安装
  • BSV区块链上的覆盖网络服务现已开放公测
  • 常回家看看之house_of_cat