报数游戏 - 华为OD统一考试(E卷)

news2024/9/29 1:45:48

2024华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集

华为OD机试

题目描述

100个人围成一圈,每个人有一个编号,编号从1开始到100。他们从1开始依次报数,报到为M的人自动退出圈圈,然后下一个人接着从1开始报数,直到剩余的人数小于M。请问最后剩余的人在原先的编号为多少?

输入描述

输入一个整数参数M。

输出描述

如果输入参数M小于等于1或者大于等于100,输出"ERROR!";否则按照原先的编号从小到大的顺序,以逗号分割输出编号字符串。

示例1

输入:
3

输出:
58,91

说明:
输入M为3,最后剩下两个人

示例2

输入:
4

输出:
34,45,97

说明:
输入M为4,最后剩下三个人

题解

该问题属于循环链表问题,可以通过约瑟夫环(Josephus Problem)的思路来解决。这类问题的关键在于模拟一个按固定规则报数和删除的过程。通过循环报数,每次删除报到特定数字的人,并在下次从紧邻剩下的人重新开始报数,直到剩下的人数少于M。


解题思路:

  1. 输入校验:首先检查输入的整数参数 M 是否在有效范围(1 < M < 100)内。如果无效则输出 "ERROR!"
  2. 初始化队列:使用一个列表或者链表来保存1到100的编号。这个队列将模拟人围成一圈的情况。
  3. 循环删除元素:从编号为1开始报数,每当报到数字 M 时,移除该人(即从队列中删除该元素),并从下一个人重新开始报数。
  4. 处理循环:为了模拟围成一圈的过程,当到达列表末尾时,需要从头继续开始报数。
  5. 输出结果:当剩下的人数少于 M 时,按照编号升序输出剩下的编号,以逗号分隔。

Java

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

/**
 * @author code5bug
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int M = sc.nextInt();
        if (M <= 1 || M >= 100) {
            System.out.println("ERROR!");
            return;
        }

        List<String> nums = new LinkedList<>();
        for (int i = 1; i <= 100; i++) {
            nums.add(String.valueOf(i));
        }

        Iterator<String> it = nums.iterator();
        for (int now = 1; nums.size() >= M; now++) {
            if (!it.hasNext()) it = nums.iterator(); // 回到开头
            it.next(); // 遍历下一个

            if (now == M) {
                // 注意: Iterator 的 remove() 方法只能在调用 next() 之后使用
                it.remove();
                now = 0;
            }
        }

        System.out.println(String.join(",", nums));	// 输出剩余元素
    }
}

Python

def main():
    M = int(input())
    if M <= 1 or M >= 100:
        print("ERROR!")
        return

    nums = [str(i) for i in range(1, 101)]  # 初始化编号列表

    index = 0
    now = 1
    while len(nums) >= M:
        if now == M:
            nums.pop(index)	# 删除当前编号
            now = 0	# 重置计数
        else:
            # 如果当前位置是最后一个元素,回到第一个位置(循环列表效果)
            index = (index + 1) % len(nums)
        now += 1

    print(",".join(nums))	# 输出剩余编号


if __name__ == "__main__":
    main()

C++

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int M;
    cin >> M;
    if (M <= 1 || M >= 100) {
        cout << "ERROR!" << endl;
        return 0;
    }

    list<int> nums;
    for (int i = 1; i <= 100; i++) nums.push_back(i);

    int now = 1;
    for (auto it = nums.begin(); nums.size() >= M; now++) {
        if (it == nums.end()) it = nums.begin();   // 回到链表开头

        if (now == M) {
            // 注意这里 it = 不要漏写
            it  = nums.erase(it);   // 删除当前元素并更新迭代器
            now = 0;                // 重置计数
        } else {
            it++;
        }
    }

    for (auto it = nums.begin(); it != nums.end();) {
        cout << *it;
        if (++it != nums.end()) cout << ",";
    }
    cout << endl;

    return 0;
}

整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

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

相关文章

数据链路层 ——MAC

目录 MAC帧协议 mac地址 以太网帧格式 ARP协议 ARP报文格式​编辑 RARP 其他的网络服务或者协议 DNS ICMP协议 ping traceroute NAT技术 代理服务器 网络层负责规划转发路线&#xff0c;而链路层负责在网络节点之间的转发&#xff0c;也就是"一跳"的具体传输…

ubuntu18.04 Anconda安装及使用

1、安装Anaconda 1)下载&#xff1a; 下载链接&#xff1a;https://www.anaconda.com/download#downloads 点击图中Free Download&#xff0c;登录并下在 下载对应版本 2&#xff09;安装 sudo bash Anaconda3-2024.06-1-Linux-x86_64.sh输入后&#xff0c;直接回车安装。 出…

NSSCTF [HNCTF 2022 WEEK2]e@sy_flower

将文件拖入ida 就看到很显眼的花指令 对着jmp指令nop掉 将main函数按p定义 F5查看伪c代码 思路就是输入的flag先互换位置&#xff0c;再与0x30异或。 int __cdecl __noreturn main(int argc, const char **argv, const char **envp) {signed int v3; // 存储临时值int i; // 循…

栏目二:Echart绘制动态折线图+柱状图

栏目二:Echart绘制动态折线图+柱状图 配置了一个ECharts图表,该图表集成了数据区域缩放、双Y轴显示及多种图表类型(折线图、柱状图、象形柱图)。图表通过X轴数据展示,支持平滑折线展示比率数据并自动添加百分比标识,柱状图以渐变色展示评论数量,而象形柱图则以矩形形式展…

基于baidu的云函数实现隐藏c2真实地址

参考 云函数利用&Profile混淆 可能是大家都用的腾讯云搞得现在腾讯云下架那个api网关了。。。所以只能找其他的云函数使用 在网上只找到了一片不是腾讯云的云函数&#xff0c;使用的是百度云函数&#xff0c;那么也尝试的使用一下百度云函数。 百度云&#xff1a;函数计…

C++里的随机数

想用C做最基础的猜数字,肯定少不了随机数; srand(unsigned(time(NULL))); rand() //是生成一个随机数 rand()%1001//就是一个从一到一百的随机数 合体: #include <iostream> #include <cstdlib> #include <time.h> int main() { int g 0; while (g < …

Redis缓存双写一致性笔记(上)

Redis缓存双写一致性是指在将数据同时写入缓存&#xff08;如Redis&#xff09;和数据库&#xff08;如MySQL&#xff09;时&#xff0c;确保两者中的数据保持一致性。在分布式系统中&#xff0c;缓存通常用于提高数据读取的速度和减轻数据库的压力。然而&#xff0c;当数据更新…

NetAssist测试TCP和UDP

由于在Windows下经常使用NetAssist.exe这款网络调试工具进行TCP、UDP的服务端、客户端的监听&#xff0c;对于需要编写各种通信协议的TCP服务端、客户端以及UDP通信程序来说是很方便的。下载地址&#xff1a;http://free.cmsoft.cn/download/cmsoft/assistant/netassist5.0.14.…

Docker容器的使用

前提条件 Linux环境安装好Docker&#xff0c;可参考Rocky Linux9下安装Docker和卸载Docker Docker命令图 帮助命令 帮助命令&#xff0c;查看有哪些命令可以用 [rootlocalhost ~]# docker --help ​ 查看某个命令的帮助&#xff0c;例如&#xff1a;run [rootlocalhost ~]# …

MySQL递归查询笔记

目录 一、创建表结构和插入数据 二、查询所有子节点 三、查询所有父节点 四、查询指定节点的根节点 五、查询所有兄弟节点&#xff08;同级节点&#xff09; 六、获取祖先节点及其所有子节点 七、查询每个节点之间的层级关系 八、查询指定节点之间的层级关系 一、创建表…

一款辅助渗透测试过程,让渗透测试报告一键生成

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

动态顺序表的增删改查(数据结构)

目录 一、顺序表 二、静态顺序表 三、动态顺序表 3.1、动态顺序表的实现 3.2、动态顺序表的实现 3.3.1、结构体创建 3.3.2、初始化 3.3.3、销毁数据 3.3.4、增容空间 3.3.5、尾插数据 3.3.6、头插数据 3.3.7、删除尾数据 3.3.8、打印数据 3.3.9、删除头数据 3.3…

设备管理系统-TPM(PC+APP/PDA全流程)高保真Axure原型 源文件分享

随着科技的不断发展&#xff0c;企业对于设备管理的需求也日益增强。为了满足企业在设备管理方面的各种需求&#xff0c;站长为大家整理了一套设备管理系统TPM&#xff08;PCAPP/PDA全流程&#xff09;高保真Axure原型&#xff0c;通过这套原型&#xff0c;企业能够实现对设备的…

TDSQL-C电商小助手,AI驱动的智能化数据洞察新纪元

前言&#xff1a; 在数字经济蓬勃发展的今天&#xff0c;电商行业作为数字化转型的先锋&#xff0c;正以前所未有的速度积累着海量数据。这些数据不仅是交易记录的简单堆砌&#xff0c;更是企业洞察市场趋势、优化运营策略、提升用户体验的宝贵财富。然而&#xff0c;如何从这…

【2024.9.28练习】青蛙的约会

题目描述 题目分析 由于两只青蛙都在跳跃导致变量多&#xff0c;不妨采用物理题中的相对运动思想&#xff0c;设青蛙A不动&#xff0c;青蛙B每次跳米&#xff0c;两只青蛙的距离为米。正常来说&#xff0c;只要模拟青蛙B与青蛙A的相对运动过程&#xff0c;最终当青蛙B与青蛙A距…

Goweb---Gorm操作Mysql数据库(一)

本文重点&#xff1a; db.AutoMigrate()这个函数的理解&#xff1a; AutoMigrate是GORM提供的一个方法&#xff0c;用于自动迁移你的模型&#xff08;即数据库表结构&#xff09;到数据库中&#xff0c;确保数据库表与你的Go结构体&#xff08;模型&#xff09;保持一致。 首先…

第十四届蓝桥杯真题Python c组D.平均(持续更新)

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;蓝桥杯关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 【问题描述】 有一个长度为n的数组(n是10的倍数)&#xff0c;每个数 …

vscode配置Eslint后保存出现大量波浪线

解决问题&#xff1a;配置代码格式化 快捷键打开设置&#xff1a;ctrlshiftP 输入&#xff1a; format code 选择&#xff1a;

MySQL-数据库约束

1.约束类型 类型说明NOT NULL非空约束 指定非空约束的列不能存储NULL值 DEFAULT默认约束当没有给列赋值时使用的默认值UNIQUE唯一约束指定唯一约束的列每行数据必须有唯一的值PRIMARY KEY主键约束NOT NULL和UNIQUE的结合&#xff0c;可以指定一个列霍多个列&#xff0c;有助于…

qt6 使用QPSQL

qt6 自带pg数据库驱动&#xff1a; pro文件加个说明&#xff1a; 引用位置添加&#xff08;按需添加&#xff0c;这里我就大致加一下&#xff09;&#xff1a; test code: 理想情况当然是要用pool,这里只是演示调用而已 QSqlError DbTool::testConnection(const QString &…