(新卷,200分)- 不开心的小朋友(Java JS Python)

(新卷,200分)- 不开心的小朋友(Java & JS & Python)

题目描述

游乐场里增加了一批摇摇车,非常受小朋友欢迎,但是每辆摇摇车同时只能有一个小朋友使用,如果没有空余的摇摇车,需要排队等候,或者直接离开,最后没有玩上的小朋友会非常不开心。

请根据今天小朋友的来去情况,统计不开心的小朋友数量。

  1. 摇摇车数量为N,范围是: 1 ≤ N < 10;
  2. 每个小朋友都对应一个编码,编码是不重复的数字,今天小朋友的来去情况,可以使用编码表示为:1 1 2 3 2 3。(若小朋友离去之前有空闲的摇摇车,则代表玩耍后离开;不考虑小朋友多次玩的情况)。小朋友数量 ≤ 100
  3. 题目保证所有输入数据无异常且范围满足上述说明。
输入描述

第一行: 摇摇车数量
第二行: 小朋友来去情况

输出描述

返回不开心的小朋友数量

用例
输入1
1 2 1 2
输出0
说明第一行,1个摇摇车
第二行,1号来 2号来(排队) 1号走 2号走 (1号走后摇摇车已有空闲,所以玩后离开)
输入1
1 2 2 3 1 3
输出1
说明

第一行,1个摇摇车

第二行,1号来 2号来(排队) 2号走(不开心离开) 3号来(排队) 1号走 3号走(1号走后摇摇车已有空闲,所以玩后离开)

题目解析

本题应该只是逻辑分析题。

我的解题思路如下:

定义一个playing集合,用于记录正在玩摇摇车的小朋友。

定义一个waiting队列,用于记录正在排队的小朋友。

然后遍历小朋友编号列表,被遍历的小朋友设为kid

首先,需要判断 kid 的状态,kid可能是三种状态:

  • 正在玩摇摇车(即在playing集合中)
  • 正在排队(即在waiting集合中)
  • 新加入的(即既不在playing中,也不在waitingzhong1)

针对不同状态的kid,我们应该做如下处理:

  • 如果 kid 在 playing 中存在,则本次kid编号出现,代表kid玩好了,开心地离开了。

当playing集合中有kid开心地离开后,此时我们还应该检查waiting队列是否有小朋友排队,如果有,我们应该立即将队头的小朋友加入playing集合,即让排在队头的小朋友玩摇摇车。

  • 如果 kid 在 waiting 中存在,则本次kid编号出现,代表kid没有玩上,不开心地离开了。
  • 如果 kid 既不在playing,也不在waiting,则说明kid是新加入的,此时我们需要检查摇摇车是否还有剩余
  1. 如果palying.size < n,则代表摇摇车还有剩余,则此时kid可以直接去玩,即加入playing集合
  2. 如果playing.size == n,则代表摇摇车用完了,则此时kid只能去排队,即加入waiting队列
JS算法源码
/* JavaScript Node ACM模式 控制台输入获取 */ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const lines = []; rl.on("line", (line) => { lines.push(line); if (lines.length == 2) { const n = parseInt(lines[0]); const kids = lines[1].split(" "); console.log(getResult(n, kids)); lines.length = 0; } }); function getResult(n, kids) { // 不开心的小朋友数量 let unHappy = 0; // 已在摇摇车上的小朋友编号 const playing = new Set(); // 正在排队的小朋友编号 const waiting = []; for (let kid of kids) { if (playing.has(kid)) { // 如果kid是摇摇车上的小朋友编号, 则代表kid玩好了要离开 playing.delete(kid); // 如果kid离开后,摇摇车有空位了,如果此时有人排队,则让排队的人上车玩 if (waiting.length > 0) { playing.add(waiting.shift()); } continue; } // 如果kid不是摇摇车上的小朋友,则检查kid是不是排队的小朋友 const index = waiting.indexOf(kid); if (index != -1) { // 如果是排队的小朋友,则说明kid没有玩到摇摇车,因此会不开心的离开 unHappy++; waiting.splice(index, 1); continue; } // 如果kid既不是摇摇车上的小朋友,也不是排队的小朋友,则是新来的小朋友 if (playing.size < n) { // 如果摇摇车还有空位,则直接玩 playing.add(kid); } else { // 如果摇摇车没有空位了,则需要排队 waiting.push(kid); } } return unHappy; }
Java算法源码
import java.util.HashSet; import java.util.LinkedList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = Integer.parseInt(sc.nextLine()); String[] kids = sc.nextLine().split(" "); System.out.println(getResult(n, kids)); } public static int getResult(int n, String[] kids) { // 不开心的小朋友数量 int unHappy = 0; // 已在摇摇车上的小朋友编号 HashSet<String> playing = new HashSet<>(); // 正在排队的小朋友编号 LinkedList<String> waiting = new LinkedList<>(); for (String kid : kids) { if (playing.contains(kid)) { // 如果kid是摇摇车上的小朋友编号, 则代表kid玩好了要离开 playing.remove(kid); // 如果kid离开后,摇摇车有空位了,如果此时有人排队,则让排队的人上车玩 if (waiting.size() > 0) { playing.add(waiting.removeFirst()); } continue; } // 如果kid不是摇摇车上的小朋友,则检查kid是不是排队的小朋友 int index = waiting.indexOf(kid); if (index != -1) { // 如果是排队的小朋友,则说明kid没有玩到摇摇车,因此会不开心的离开 unHappy++; waiting.remove(index); continue; } // 如果kid既不是摇摇车上的小朋友,也不是排队的小朋友,则是新来的小朋友 if (playing.size() < n) { // 如果摇摇车还有空位,则直接玩 playing.add(kid); } else { // 如果摇摇车没有空位了,则需要排队 waiting.add(kid); } } return unHappy; } }
Python算法源码
# 输入获取 n = int(input()) kids = input().split() # 算法入口 def getResult(): # 不开心的小朋友数量 unHappy = 0 # 已在摇摇车上的小朋友编号 playing = set() # 正在排队的小朋友编号 waiting = [] for kid in kids: if kid in playing: # 如果kid是摇摇车上的小朋友编号, 则代表kid玩好了要离开 playing.remove(kid) # 如果kid离开后,摇摇车有空位了,如果此时有人排队,则让排队的人上车玩 if len(waiting) > 0: playing.add(waiting.pop(0)) continue # 如果kid不是摇摇车上的小朋友,则检查kid是不是排队的小朋友 if kid in waiting: # 如果是排队的小朋友,则说明kid没有玩到摇摇车,因此会不开心的离开 unHappy += 1 waiting.pop(waiting.index(kid)) continue # 如果kid既不是摇摇车上的小朋友,也不是排队的小朋友,则是新来的小朋友 if len(playing) < n: # 如果摇摇车还有空位,则直接玩 playing.add(kid) else: # 如果摇摇车没有空位了,则需要排队 waiting.append(kid) return unHappy # 算法调用 print(getResult())

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

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

相关文章

强烈安利!本科生必用10款一键生成论文工具测评

强烈安利&#xff01;本科生必用10款一键生成论文工具测评 学术写作工具测评&#xff1a;为什么你需要这份2026榜单 在当前高校学术环境日益复杂的背景下&#xff0c;本科生的论文写作任务不仅数量增加&#xff0c;对质量与规范的要求也不断提升。面对选题困难、文献整理繁琐、…

怎么将已有的应用转换成MCP服务?

将已有的应用转换为MCP&#xff08;Model Context Protocol&#xff09;服务需要将该应用的功能封装为标准化的MCP工具、资源或者提示&#xff0c;再通过MCP Server对外暴露。 主要步骤如下&#xff1a; 1.首先需要识别应用中要提供给外部调用的功能&#xff0c;比如说API接口、…

万象EXCEL应用(二十四) KTV 营业报表+员工提成 ——东方仙盟炼气期

KTV营业报表提成报表整合 KTV 每日、每月的核心营收数据&#xff0c;涵盖包厢消费、酒水销售、增值服务等全品类收入&#xff0c;清晰呈现营收总额、时段营收分布、客源结构等关键指标&#xff0c;无需手动统计零散单据&#xff0c;自动生成标准化报表&#xff0c;支持多维度筛…

django毕设项目:基于django+网络爬虫的安客居二手房屋信息采集系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Spring Security 7 之 OIDC /connect/userinfo 端点解析:ID Token 与用户信息获取

前言 在使用 Spring Security OAuth2 Authorization Server 时&#xff0c;很多开发者对 /userinfo 端点存在两个常见的疑问&#xff1a; 如果 ID Token 已经包含了用户信息&#xff0c;为什么还需要单独的 /userinfo 端点&#xff1f;请求 /userinfo 时使用的是 access_toke…

22 分钟拿下 Uber 2026 OA!Python 解题 + 推广福利,大厂笔试稳了

家人们谁懂啊&#xff01;Uber 2026 OA 居然这么多 “送分题”&#xff1f;用 Python 刷题 模板复用&#xff0c;我直接 22 分钟通关 4 道题&#xff0c;70 分钟的考试时间硬生生省出大半&#xff01;今天把保姆级解题思路 推广福利全分享&#xff0c;想冲大厂的宝子速码&…

当AI学会拍短剧:Huobao Drama全栈AI短剧生成平台深度解析

从一个想法到一部完整短剧&#xff0c;AI只需要几分钟。这不是科幻&#xff0c;这是正在发生的技术革命。 前言&#xff1a;一个程序员的"导演梦" 还记得小时候看电视剧&#xff0c;总幻想自己能当导演&#xff0c;拍出惊天动地的大片。长大后才发现&#xff0c;拍一…

【课程设计/毕业设计】大数据基于网络爬虫的安客居二手房屋信息采集系统基于django+网络爬虫的安客居二手房屋信息采集系统的设计与实现【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

快速看懂供应链的三张表:采购计划表、库存盘点表、供应商评估表

你每天在供应链一线&#xff0c;是不是经常遇到这些事儿&#xff1a;采购计划做了&#xff0c;货却没按时到&#xff0c;生产线等着急了&#xff1b;库存盘点一查&#xff0c;发现一堆呆滞料、账实不符&#xff0c;月底对不上账&#xff1b;供应商换了好几轮&#xff0c;质量还…

先知AI洞察 | 男装创意的枯竭,是否已让您彻夜难眠?

当下男装市场同质化严重&#xff0c;设计灵感仿佛陷入循环&#xff0c;你是否也感受到了这份挥之不去的创意焦虑&#xff1f;从趋势预测到图案设计&#xff0c;传统的创作流程耗时费力&#xff0c;且难以突破固有思维。这不仅是设计师的困境&#xff0c;更是品牌面对快速迭代的…

【毕业设计】基于django+网络爬虫的安客居二手房屋信息采集系统的设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

技术速递|想要更好的 AI 输出?试试上下文工程

作者&#xff1a;Christina Warren 排版&#xff1a;Alan Wang 了解如何通过自定义指令、可复用提示词以及自定义智能体&#xff0c;帮助 GitHub Copilot 提供更精准的结果。 如果你曾觉得 GitHub Copilot 只要多一点上下文就能变得更强大&#xff0c;那你的感觉是对的。上下文…

吐血推荐10个一键生成论文工具,继续教育学生轻松搞定论文写作!

吐血推荐10个一键生成论文工具&#xff0c;继续教育学生轻松搞定论文写作&#xff01; AI 工具助力论文写作&#xff0c;轻松应对学术挑战 在当前的继续教育环境中&#xff0c;论文写作已成为许多学生必须面对的重要任务。无论是本科、硕士还是博士阶段&#xff0c;撰写一篇高质…

【Java】JDK8的一些新特性

个人主页:https://github.com/zbhgis 目录前言内容概览更新记录Lambda表达式方法引用静态方法引用实例方法引用特定类型方法的引用构造器引用Stream流Stream的使用stream的常用中间方法Stream流的常见终结方法总结 前…

MBE(Model-based Evaluation) LLM-as-a-Judge

在论文 4.2.3 评估指标 部分提到的 MBE 是 Model-based Evaluation&#xff08;基于模型的评估&#xff09;的缩写。 这是一个由大型语言模型担任“裁判”来评估模型输出质量的自动化评估方法。具体细节如下&#xff1a;MBE&#xff08;Model-based Evaluation&#xff09;详解…

JVM 类加载机制复习 - 实践

JVM 类加载机制复习 - 实践2026-01-19 22:40 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; …

深入解析:【技术深度】钱包安全威胁模型 + 防御蓝图

深入解析:【技术深度】钱包安全威胁模型 + 防御蓝图pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

【Java】Map

个人主页:https://github.com/zbhgis 目录前言内容概览更新记录Map概述与常用方法Map集合的遍历方法键找值键值对Lambda综合案例HashMap,LinkedHashMap,TreeMap集合的嵌套总结 前言 1.之前学过,因此本文是个人复习…

HTML5 WebSocket:深入解析与实际应用

HTML5 WebSocket:深入解析与实际应用 引言 随着互联网技术的不断发展,实时通信的需求日益增长。HTML5 WebSocket作为一种高效、低延迟的通信协议,逐渐成为开发者的新宠。本文将深入解析HTML5 WebSocket的原理、特点以及在实际开发中的应用。 一、HTML5 WebSocket简介 1.…