华为OD机试真题---喊7的次数重排
题目描述
喊7是一个传统的聚会游戏。N个人围成一圈,按顺时针从1到N编号。编号为1的人从1开始喊数,下一个人喊的数字为上一个人的数字加1。但是,当将要喊出来的数字是7的倍数或者数字本身含有7时,不能把这个数字直接喊出来,而是要喊“过”。假定玩这个游戏的N个人都没有失误地在正确的时机喊了“过”,现在给定一个长度为N的数组,存储了打乱顺序的每个人喊“过”的次数,请把它还原成正确的顺序,即数组的第i个元素存储编号i的人喊“过”的次数。
输入输出
-
输入:
- 一行,为空格分隔的喊“过”的次数,注意K(即喊到的最大数字,但题目中并不直接给出K)不超过200,而数字的个数即为N。
-
输出:
- 一行,为顺序正确的喊“过”的次数,也由空格分隔。
示例
-
示例1:
- 输入:0 1 0
- 输出:1 0 0
-
示例2:
- 输入:0 0 0 2 1
- 输出:0 2 0 1 0
解题思路
- 读取输入:首先,读取输入的喊“过”的次数,并将其转换为整数列表。
- 计算总数:计算总的喊“过”的次数,即输入数组的和。
- 初始化变量:
- 初始化一个结果列表,用于存储每个人喊“过”的正确次数,长度与输入数组相同。
- 初始化当前数字和当前玩家索引。
- 模拟喊数过程:
- 从1开始模拟喊数的过程,直到喊“过”的次数达到总数。
- 在模拟过程中,判断当前数字是否需要喊“过”(是7的倍数或含有7)。
- 如果需要喊“过”,则减少剩余的“过”的次数,并增加当前玩家的喊“过”次数。
- 每喊完一个数,移动到下一个玩家(使用模运算实现循环)。
- 输出结果:将结果列表转换为字符串,并用空格连接后输出。
代码实现
import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.Collectors;public class CallSevenReordering {public static void main(String[] args) {// 创建扫描器对象以读取输入Scanner scanner = new Scanner(System.in);// 读取输入的喊“过”次数,并转换为整数数组String[] inputArrayStr = scanner.nextLine().split(" ");int[] inputArray = new int[inputArrayStr.length];for (int i = 0; i < inputArrayStr.length; i++) {inputArray[i] = Integer.parseInt(inputArrayStr[i]);}// 计算总的“过”次数int totalOvers = Arrays.stream(inputArray).sum();// 初始化结果数组,用于存储按正确顺序的喊“过”次数int[] resultArray = new int[inputArray.length];// 初始化当前数字和当前玩家索引int currentNumber = 1;int currentIndex = 0;// 模拟喊数过程while (totalOvers > 0) {// 判断当前数字是否需要喊“过”if (currentNumber % 7 == 0 || String.valueOf(currentNumber).contains("7")) {resultArray[currentIndex]++; // 当前玩家喊“过”次数加1totalOvers--; // 剩余的“过”次数减1}// 更新当前数字和当前玩家索引currentNumber++;currentIndex = (currentIndex + 1) % inputArray.length;}// 输出结果数组System.out.print(Arrays.stream(resultArray).mapToObj(String::valueOf).collect(Collectors.joining(" ")));// 关闭扫描器scanner.close();}
}
代码解析
- 读取输入:使用
input().split()读取输入,并将其转换为整数列表a。 - 计算总数:使用
sum(a)计算总的喊“过”的次数s。 - 初始化变量:
n为玩家数量,即输入数组的长度。p为结果列表,初始化为长度为n的零列表。i为当前数字,初始化为1。j为当前玩家索引,初始化为0。
- 模拟喊数过程:
- 使用
while循环,直到s(剩余的“过”的次数)为0。 - 在循环中,判断当前数字
i是否需要喊“过”。- 如果需要,则减少
s并增加当前玩家的喊“过”次数p[j]。
- 如果需要,则减少
- 每次循环结束后,数字
i加1,并移动到下一个玩家(使用j = (j + 1) % n实现循环)。
- 使用
- 输出结果:使用
join和map将结果列表p转换为字符串,并用空格连接后输出。
运行实例解析
- 输入:
0 1 0 - 程序模拟喊数过程:
- 1(不过)
- 2(不过)
- 3(不过)
- 4(不过)
- 5(不过)
- 6(不过)
- 7(过,当前玩家是1,但输入说1没过,所以这是给下一个玩家的,但这里模拟是为了验证总数)
- 由于我们不知道确切的最大数,我们继续模拟直到用完所有的“过”:
- 8(不过)
- 9(不过,但当前玩家2应该在这里喊过,因为上一个7的倍数已经过了给2)
- …(继续模拟,但这里我们省略中间步骤,因为我们已经知道2会喊1次过)
- 输出:
1 0 0(表示编号1的人喊过1次,编号2和3的人没有喊过)
注意:实际的模拟过程不需要我们确切地知道喊到了哪个数字,只需要知道每个人喊“过”的次数是否正确。由于输入已经给出了这些次数,我们的模拟主要是为了验证算法的正确性。在这个例子中,输入0 1 0直接告诉我们答案应该是1 0 0。
相关文章:
华为OD机试真题---喊7的次数重排
题目描述 喊7是一个传统的聚会游戏。N个人围成一圈,按顺时针从1到N编号。编号为1的人从1开始喊数,下一个人喊的数字为上一个人的数字加1。但是,当将要喊出来的数字是7的倍数或者数字本身含有7时,不能把这个数字直接喊出来&#x…...
使用阿里巴巴的图
参考链接1 引用彩色图标可参考以下链接 (到第三步 测试图标效果 的时候 还是可以保持之前的写法:<i/sapn class“iconfont icon-xxx”>也会出现彩色的) 参考链接2 阿里巴巴字体使用 也可以直接将官网的代码复制过来到页面的css区域...
【hot100-java】排序链表
链表题。 使用归并排序法。 一图解决。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; thi…...
腾讯云视立方TRTCCalling Web 相关
基础问题 什么是 TRTCCalling? TRTCCalling 是在 TRTC 和 TIM 的基础上诞生的一款快速集成的音视频的解决方案。支持1v1和多人视频/语音通话。 TRTCCalling 是否支持接受 roomID 为字符串? roomID 可以 string,但只限于数字字符串。 环境问题 Web …...
使用argparse库实现命令行参数解析的实用指南
使用argparse库实现命令行参数解析的实用指南 在现代软件开发中,命令行工具的使用越来越普遍。无论是自动化脚本、数据处理工具,还是系统管理工具,命令行参数解析都是一个不可或缺的功能。Python的argparse库提供了一种简单而强大的方式来处理命令行参数,使得开发者能够轻…...
kafka消息队列核心内容及常见问题
目录 1. 使用消息队列的目的(优点与缺点) 2. 常见各消息队列对比 3. kafka介绍 3.1 kafka简介 3.2 kafka特点 3.3 kafka系统架构 3.4 设置数据可靠性 3.4.1 Topic 分区副本 3.4.2 消息确认机制 4. 常见问题(面试题) 4.…...
电脑无线网wifi和有线网同时使用(内网+外网同时使用)
一、要求 我这里以无线网wifi为外网,有线网卡为内网为例: 一、基本信息 无线wifi(外网):ip是192.168.179.235,网关是192.168.179.95有线网(内网):ip是192.168.10.25&…...
Ubuntu22.04阿里云服务器 Gitlab搭建CICD
gitlab搭建cicd流水线教程 1、阿里云申请免费云盘 申请免费云盘用于创建gitlab 申请方法百度 2、安装gitlab-ce 更新系统: sudo apt update sudo apt upgrade -y 安装必要的依赖: sudo apt install -y curl openssh-server ca-certificates pos…...
2024最新全流程ChatGPT深度科研应用、论文与项目撰写、数据分析、机器学习、深度学习及AI绘图
2022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5,将人工智能的发展推向了一个新的高度。 2023年4月,更强版本的ChatGPT4.0上线,文本、语音、图像等多模态交互方式使其…...
网络流C++
网络流问题及其应用 网络流问题是图论中的一个经典问题,应用于交通调度、物流配送、计算机网络等领域。它通过模型化图中的流量传递过程,解决从源点传递流量到汇点的最优流量分配问题。本文将介绍网络流的基本概念、几种经典算法,并通过一个…...
RTC -
RTC 目录 RTC 回顾 RTC 如何实现RTC制作一个时钟日历 代码编写 rtc.c完整代码 模块开发的步骤: 1、找文档 2、 在文档里面找通信方式,通信过程(协议) 3、代码> -- 前面学的是模块的开发,串口类,I…...
图像处理中常用的统计矩
目录 原点矩中心矩常用的统计矩偏度(Skewness)定义解释 峰度(Kurtosis)定义解释 统计矩的应用MATLAB相关函数 原点矩(Moment about the Origin)和中心矩(Central Moment)是概率论和数…...
Ubuntu 详解| Ubuntu ssh| Ubuntu apt命令大全| Ubuntu性能优化| Ubuntu换镜像源
Ubuntu 是Debian开源linux系统体系下的子分支之一 Debian-ubuntu 和它一样的还有 kali(一款渗透测试软件) Debian-kali 小白参考 :Centos 7.9 安装 图解版 小白必看 最新_centos7.9-CSDN博客文章浏览阅读2.5k次,点赞…...
Linux安全命令(Linux Security Commands)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…...
2024最新版安装教程!Python安装+PyCharm安装使用教程!!(非常简单)
Python下载安装 一、进入Python官网首页,下载最新版的Python 官方网址:Download Python | Python.org 鼠标悬浮在Downloads,选择最新版本 注意:由于Python官网服务器设立在国外,所以下载速度非常慢,我这…...
C++:STL:vector类常用函数介绍(附加部分重要函数模拟实现)
cplusplus.com/reference/vector/vector/https://cplusplus.com/reference/vector/vector/ vector在实际中非常的重要,在实际中我们熟悉常见的接口就可以,有了string的基础,vector其实大体使用方法上二者是类似的: 这里我们先给…...
[工程构建] 使用 pkg-config 的 cmake 模板
可执行文件 # 1) cmake basic cmake_minimum_required(VERSION 3.12) #cmake version check set(CXX_STANDARD 17) #c standard version)# 2) project info #auto generated variables as below: #PROJECT_NAME: "hello" #hello_BINARY_DIR: build root dir #hello_…...
MATLAB 注释快捷键
matlab 前言单行注释多行注释 快捷键使用菜单 前言 单行注释 % 这是一个单行注释 x 10; % 这是另一个单行注释多行注释 %{ 这是一个多行注释 它可以包含多行文本 x 10; % 这行代码也会被注释掉 %}快捷键 在 MATLAB 编辑器中,可以使用快捷键来快速注释和取消注…...
8.优化存储过程的性能(8/10)
优化存储过程的性能 1.引言 存储过程是数据库系统中预先编写好的SQL语句集合,它们被保存在数据库服务器上,可以在需要时被调用执行。存储过程的使用可以提高数据库操作的效率,减少网络通信,并且可以封装复杂的逻辑,使…...
Django发送邮件代理服务器配置
根路由下配置 MAIL_BACKEND django.core.mail.backends.smtp.EmailBackend EMAIL_HOST smtp.qq.com EMAIL_HOST_USER 66897079qq.com EMAIL_HOST_PASSWORD aavlzhzvqorbcahcEMAIL_PORT 465 EMAIL_USE_SSL True发送邮件 message "<p>尊敬的用户您好ÿ…...
5个Rust驱动特性解决存储清理难题:Czkawka技术深度解析
5个Rust驱动特性解决存储清理难题:Czkawka技术深度解析 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka Czkawka是一款基于Rust语言开发…...
intv_ai_mk11效果惊艳案例:为初创公司1小时生成完整BP商业计划书框架
intv_ai_mk11效果惊艳案例:为初创公司1小时生成完整BP商业计划书框架 1. 商业计划书生成效果展示 1.1 从零到完整的商业计划书 intv_ai_mk11在商业计划书生成方面展现出惊人的效率和质量。我们实测了一个真实案例:一家智能硬件初创公司需要准备融资用…...
告别兼容性问题:手把手教你用canvas和base64转换TIFF图片
前端工程师必备:TIFF图片处理全攻略与实战解决方案 在当今数字内容爆炸式增长的时代,图片处理已成为前端开发中不可或缺的一环。作为专业开发者,我们经常需要面对各种图片格式的兼容性问题,其中TIFF(Tagged Image Fil…...
FPGA密码锁设计避坑指南:状态机划分、时序约束与安全逻辑的那些事儿
FPGA密码锁设计避坑指南:状态机划分、时序约束与安全逻辑的那些事儿 在FPGA开发领域,密码锁设计看似简单,实则暗藏玄机。许多工程师在完成基础功能后,往往会在状态机划分、时序约束和安全逻辑等环节踩坑。本文将结合实战经验&…...
5大核心功能解密:douyin-downloader抖音下载器实战指南
5大核心功能解密:douyin-downloader抖音下载器实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...
2026年Win11强力清理工具推荐:安全无广告的C盘瘦身软件怎么选?
我是个学生党,笔记本电脑的C盘从买回来就没清理过,最近装新游戏时直接提示空间不足。网上搜“Win11强力清理工具推荐”,跳出来一堆软件,看着都挺好,但又怕下载到带捆绑、弹广告的流氓软件。我只是想要一个能真正把C盘腾…...
厦门选117E还是120E?手把手教你为你的城市选择正确的高斯克吕格投影坐标系
厦门GIS项目实战:如何精准选择高斯克吕格投影坐标系 第一次在ArcGIS里看到上百个坐标系选项时,我的鼠标指针在列表上方徘徊了整整十五分钟——就像站在自动售货机前不知道按哪个按钮的新手。特别是当项目 deadline 临近,而厦门市规划局的Shap…...
告别msi2lmp参数缺失!手把手教你用Perl脚本insight2lammps搞定MS到LAMMPS的data文件转换
告别msi2lmp参数缺失!手把手教你用Perl脚本insight2lammps搞定MS到LAMMPS的data文件转换 分子动力学模拟研究者们常常遇到这样的困境:在Materials Studio(MS)中精心构建的模型,导出后却因LAMMPS自带的msi2lmp工具参数缺…...
UDS诊断服务-10例程控制服务(0x31)实战:从协议解析到车辆传感器校准
1. 从车辆抖动问题认识0x31服务的重要性 去年夏天,我遇到一辆行驶里程8万公里的SUV,车主反映急加速时发动机抖动明显。用诊断仪读取故障码显示"P0172 - 燃油修正系统过浓",但更换氧传感器和火花塞后问题依旧。这时候就需要请出我们…...
如何用3分钟为Windows换上macOS原版鼠标指针:完整美化方案
如何用3分钟为Windows换上macOS原版鼠标指针:完整美化方案 【免费下载链接】macOS-cursors-for-Windows Tested in Windows 10 & 11, 4K (125%, 150%, 200%). With 2 versions, 2 types and 3 different sizes! 项目地址: https://gitcode.com/gh_mirrors/ma/…...
