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

2025.05.22-得物春招机考真题解析-第二题

📌 点击直达笔试专栏 👉《大厂笔试突围》

💻 春秋招笔试突围在线OJ 👉 笔试突围OJ

02. 魔法书页重排

问题描述

A先生是一位魔法师,他有一本古老的魔法书,书中有 n n n 页,每页都刻有一个魔法符号。最初,第 i i i 页上刻着数字 i i i

现在A先生需要按照古老的仪式来重新排列这些魔法符号。仪式的规则是:按照从小到大的顺序,对于每个 [ 1 , n ] [1, n] [1,n] 之间的整数 x x x,将所有页码为 x x x 的倍数的页面上的魔法符号向右循环移动一位。

具体来说,如果有 k k k 个页面的页码是 x x x 的倍数,分别为 p 1 , p 2 , … , p k p_1, p_2, \ldots, p_k p1,p2,,pk(按页码从小到大排列),那么这些页面上的魔法符号会按如下方式移动: p k p_k pk 页的符号移动到 p 1 p_1 p1 页, p 1 p_1 p1 页的符号移动到 p 2 p_2 p2 页,以此类推。

请输出仪式完成后每页上的魔法符号是什么。

输入格式

第一行包含一个正整数 n n n 1 ≤ n ≤ 10 5 1 \leq n \leq 10^5 1n105),表示魔法书的页数。

输出格式

第一行包含 n n n 个整数,第 i i i 个整数表示第 i i i 页上的魔法符号。

样例输入

5
8

样例输出

5 3 2 1 4
8 7 3 5 4 2 6 1

数据范围

  • 1 ≤ n ≤ 10 5 1 \leq n \leq 10^5 1n105
样例解释说明
样例1初始状态:[1,2,3,4,5]。x=1时,所有页面循环右移:[5,1,2,3,4]。x=2时,页面2,4循环右移:[5,3,2,1,4]。x=3时,页面3循环右移:不变。x=4,5同理
样例2按照相同规则进行多轮循环移动操作

题解

这道题的关键是理解"循环右移"的概念,以及如何高效地模拟这个过程。

算法思路:

  1. 初始化数组 A [ i ] = i A[i] = i A[i]=i
  2. 对于每个 x x x 1 1 1 n n n,找出所有 x x x 的倍数位置
  3. 将这些位置上的数值进行循环右移

具体实现:

  • 对于每个 x x x,收集所有倍数位置: x , 2 x , 3 x , … x, 2x, 3x, \ldots x,2x,3x,
  • 如果只有一个位置,则无需移动
  • 否则,保存最后一个位置的值,然后从后往前依次移动

举例说明( n = 5 n=5 n=5):

  • 初始: [ 1 , 2 , 3 , 4 , 5 ] [1, 2, 3, 4, 5] [1,2,3,4,5]
  • x = 1 x=1 x=1:位置 [ 1 , 2 , 3 , 4 , 5 ] [1,2,3,4,5] [1,2,3,4,5] 循环右移 → [ 5 , 1 , 2 , 3 , 4 ] [5, 1, 2, 3, 4] [5,1,2,3,4]
  • x = 2 x=2 x=2:位置 [ 2 , 4 ] [2,4] [2,4] 循环右移 → [ 5 , 3 , 2 , 1 , 4 ] [5, 3, 2, 1, 4] [5,3,2,1,4]
  • x = 3 , 4 , 5 x=3,4,5 x=3,4,5:只有一个位置,无需移动

时间复杂度分析:对于每个 x x x,需要遍历其所有倍数,总的时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn),因为 ∑ x = 1 n ⌊ n x ⌋ = O ( n log ⁡ n ) \sum_{x=1}^{n} \lfloor \frac{n}{x} \rfloor = O(n \log n) x=1nxn=O(nlogn)

参考代码

  • Python
import sys
input = lambda: sys.stdin.readline().strip()n = int(input())
a = [0] + list(range(1, n + 1))  # 1-indexed数组for x in range(1, n + 1):pos = []  # 存储x的倍数位置for j in range(x, n + 1, x):pos.append(j)if len(pos) <= 1:continue# 循环右移:最后一个元素移到第一个位置last_val = a[pos[-1]]for i in range(len(pos) - 1, 0, -1):a[pos[i]] = a[pos[i - 1]]a[pos[0]] = last_val# 输出结果(去掉第0个元素)
print(' '.join(map(str, a[1:])))
  • Cpp
#include <iostream>
#include <vector>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin >> n;vector<int> a(n + 1);for (int i = 1; i <= n; i++) {a[i] = i;  // 初始化}for (int x = 1; x <= n; x++) {vector<int> pos;  // 存储x的倍数位置for (int j = x; j <= n; j += x) {pos.push_back(j);}if (pos.size() <= 1) continue;// 循环右移int last_val = a[pos.back()];for (int i = pos.size() - 1; i > 0; i--) {a[pos[i]] = a[pos[i - 1]];}a[pos[0]] = last_val;}for (int i = 1; i <= n; i++) {cout << a[i];if (i < n) cout << " ";}cout << "\n";return 0;
}
  • Java
import java.util.*;
import java.io.*;public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));PrintWriter pw = new PrintWriter(System.out);int n = Integer.parseInt(br.readLine());int[] a = new int[n + 1];// 初始化数组for (int i = 1; i <= n; i++) {a[i] = i;}for (int x = 1; x <= n; x++) {List<Integer> pos = new ArrayList<>();// 收集x的倍数位置for (int j = x; j <= n; j += x) {pos.add(j);}if (pos.size() <= 1) continue;// 循环右移操作int lastVal = a[pos.get(pos.size() - 1)];for (int i = pos.size() - 1; i > 0; i--) {a[pos.get(i)] = a[pos.get(i - 1)];}a[pos.get(0)] = lastVal;}for (int i = 1; i <= n; i++) {pw.print(a[i]);if (i < n) pw.print(" ");}pw.println();pw.close();br.close();}
}

相关文章:

2025.05.22-得物春招机考真题解析-第二题

&#x1f4cc; 点击直达笔试专栏 &#x1f449;《大厂笔试突围》 &#x1f4bb; 春秋招笔试突围在线OJ &#x1f449; 笔试突围OJ 02. 魔法书页重排 问题描述 A先生是一位魔法师&#xff0c;他有一本古老的魔法书&#xff0c;书中有 n n n 页&#xff0c;每页都刻有一个魔…...

ollama list模型列表获取 接口代码

ollama list模型列表获取 接口代码 curl http://localhost:11434/v1/modelscoding package hcx.ollama;/*** ClassName DockerOllamaList* Description TODO* Author dell* Date 2025/5/26 11:31* Version 1.0**/import java.io.BufferedReader; import java.io.InputStreamR…...

OPC Client第5讲(wxwidgets):初始界面的事件处理;按照配置文件初始化界面的内容

接上一讲&#xff0c;即实现下述界面的事件处理代码&#xff1b;并且按照配置文件初始化界面的内容&#xff08;三、&#xff09; 事件处理的基础知识&#xff0c;见下述链接五、 OPC Client第3讲&#xff08;wxwidgets&#xff09;&#xff1a;wxFormBuilder&#xff1b;基础…...

什么是BFC,如何触发BFC,BFC有什么特性?

理解 BFC指的是块级格式化上下文,处于BFC内部的盒子与外界互不影响 触发条件 position:absolute/fixed都会产生bfcdisplay:inline-block,table,flex等float:left/right 浮动也会产生bfchtml根元素也是bfc bfc的特性 属于同一个BFC下的盒子会垂直排列属于同一个BFC下的两个…...

python做题日记(9)

第二十一题 第二十一题是合并两个有序链表&#xff0c;合并后的链表仍然需要保持有序&#xff0c;因为在合并之前已经是两个有序链表&#xff0c;因此在合并时只需要遍历比较两个链表中的下一结点数值&#xff0c;将其中较小的一个结点添加到新的列表中。如果有任何一个链表已经…...

Leetcode 3557. Find Maximum Number of Non Intersecting Substrings

Leetcode 3557. Find Maximum Number of Non Intersecting Substrings 1. 解题思路2. 代码实现 题目链接&#xff1a;3557. Find Maximum Number of Non Intersecting Substrings 1. 解题思路 这一题就是一个比较直接的动态规划的题目&#xff0c;我们只需要考察每一个位是否…...

【C++进阶篇】初识哈希

哈希表深度剖析&#xff1a;原理、冲突解决与C容器实战 一. 哈希1.1 哈希概念1.2 哈希思想1.3 常见的哈希函数1.3.1 直接定址法1.3.2 除留余数法1.3.3 乘法散列法&#xff08;了解&#xff09;1.3.4 平方取中法&#xff08;了解&#xff09; 1.4 哈希冲突1.4.1 冲突原因1.4.2 解…...

Spring Boot——自动配置

目录 1.bean加载方式 1.1XML方式声明bean 1.2 xml 注解方式声明bean 1.3通过Configuration和Bean 1.4使用Import注解 1.5使用上下文对象在容器初始化完毕后注入bean 1.6使用ImportSelector接口 1.7实现ImportBeanDefinitionRegistrar接口 1.8bean加载方式&#xff08;…...

免费轻量便携截图 录屏 OCR 翻译四合一!提升办公效率

各位软件小达人们&#xff0c;今天来给大伙唠唠VeryCapture这款软件&#xff01; 先说说它的核心功能。这软件有个超厉害的多模态屏幕捕捉系统&#xff0c;它就像个全能小能手&#xff0c;把截图、录屏、OCR文字识别、翻译这些功能全集成在一起啦&#xff01;截图有6种模式&a…...

使用 Vuex 实现用户注册与登录功能

引言 在构建具有用户认证功能的应用时&#xff0c;Vuex 可以用来管理用户的登录状态和相关信息。以下是如何使用 Vuex 来实现用户注册与登录功能的概述。 &#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端…...

进程通信(管道,共享内存实现)

01. 进程通信简介 进程通信工具分为数据传输工具和共享内存两类。这里我们讨论进程通信工具(IPC)里面的管道、system V和共享内存。在理解阶层通信之间&#xff0c;我们先了解用户空间缓冲区和内核空间缓冲区两个概念。 1.1 用户空间缓冲区 存在于用户态的进程用户空间&#…...

电池预测 | 第28讲 基于CNN-GRU的锂电池剩余寿命预测

电池预测 | 第28讲 基于CNN-GRU的锂电池剩余寿命预测 目录 电池预测 | 第28讲 基于CNN-GRU的锂电池剩余寿命预测预测效果基本描述程序设计参考资料 预测效果 基本描述 电池预测 | 第28讲 基于CNN-GRU的锂电池剩余寿命预测 运行环境Matlab2023b及以上&#xff0c;锂电池剩余寿…...

快速上手SHELL脚本常用命令

一、设置主机名称 1.修改文件方式 重启后生效 2.命令修改 重启shell后生效 二、网卡管理nmcli 1.查看网卡 2.设置网卡 详细配置&#xff1a;快速上手Linux联网管理-CSDN博客 三、简单处理字符 1.打印连续数字 2.设置字体颜色 \033[颜色代号m 3.反向打印文件内容 tac&a…...

【无标题】前端如何实现分页?

前端如何实现分页&#xff1f; 以下是对代码的逐条总结与解释&#xff0c;按 HTML、JavaScript、CSS 顺序分模块列出&#xff0c;每条代码单独说明&#xff1a; 一、HTML 代码解释 1. 表格容器 html <table class"table table-bordered table-hover">作用&…...

【自然语言处理与大模型】大模型Agent四大的组件

大模型Agent是基于大型语言模型构建的智能体&#xff0c;它们能够模拟独立思考过程&#xff0c;灵活调用各类工具&#xff0c;逐步达成预设目标。这类智能体的设计旨在通过感知、思考与行动三者的紧密结合来完成复杂任务。下面将从大模型大脑&#xff08;LLM&#xff09;、规划…...

小巧高效的目录索引生成软件

软件介绍 本文介绍的软件名为Snap2html&#xff0c;是一款树形目录索引生成工具。 软件大小与便捷性 Snap2html这款软件已完成汉化&#xff0c;其体积仅170kb&#xff0c;小巧无比&#xff0c;且无需安装&#xff0c;可直接投入使用。 软件使用方法 该软件操作简便&#xf…...

云原生架构设计相关原则

文章目录 前言云原生架构概述云原生架构的核心原则一切皆服务原则自动化原则韧性和容错原则可观测性原则 云原生架构原则的实践意义 前言 大家好&#xff0c;我是沛哥儿。今天想和大家深入探讨一下云原生架构的相关原则。在如今数字化飞速发展的时代&#xff0c;云原生架构已经…...

android实现使用RecyclerView详细

显示页面代码&#xff1a;activity_category_inventory.xml代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" xmlns:app"http://schemas.and…...

华为云Flexus+DeepSeek征文 | Flexus X实例助力 Dify-LLM 一键部署:性能跃升与成本优化的革新实践

引言 在AI大模型应用快速普及的背景下&#xff0c;企业对低门槛部署、高性能算力与成本可控的需求日益迫切。华为云推出的Flexus X实例&#xff0c;作为专为AI工作负载优化的新一代算力底座&#xff0c;通过1.6倍算力提升、关键业务6倍加速、综合降本30%等核心优势&#xff0c…...

曼昆经济学原理第九版目录

格里高利曼昆的《经济学原理》&#xff08;Principles of Economics&#xff09;通常分为34章&#xff08;第9版&#xff0c;2024年英文版&#xff09;&#xff0c;分为微观经济学&#xff08;第1-18章&#xff09;和宏观经济学&#xff08;第19-34章&#xff09;两部分 第一部…...

数据库blog7_MySql的下载与配置准备

&#x1f33f;MySql下载 &#x1f342;1.应用版本选择 选择社区版&#xff0c;免费适合初学者 相关链接下载页面下载界面介绍 &#x1f342;2.OS版本选择 根据自己的OS类型&#xff08;Windows/Linux&#xff08;CentOS/Ubuntu …&#xff09;/macOS&#xff09;选择对应版本…...

YOLOv11助力地铁机场安检!!!一键识别刀具

文末有完整代码出处 随着现代社会的高速发展&#xff0c;交通工具和公共场所的安全管理面临着前所未有的挑战。尤其在机场、地铁、车站等公共安全检查点&#xff0c;如何提高安检效率、精准识别危险物品&#xff0c;成为了亟待解决的问题。在传统的安检过程中&#xff0c;X光图…...

RFID工业读写器的场景化应用选型指南

RFID工业读写器是上海岳冉RFID专为工业场景设计的高性能射频识别设备&#xff0c;核心功能围绕高效数据采集与可靠传输展开。其基础能力包括多协议支持&#xff08;如ISO 18000-6C&#xff09;与多标签防碰撞处理&#xff0c;可同时读取/写入EPC编码、用户数据等标签信息&#…...

java中的线程安全的集合

1.ConcurrentHashMap。 key,value结构。 jdk1.7通过分段锁保证不同段同时操作是线程安全的&#xff0c;但并发不足&#xff0c;jdk1.8通过node节点锁和CAS保证并发安全。不同node节点可以并发读写。通过它的computer,computerIfAbsent,等可以保证原子更新value。ifAbsent表示有…...

单片机如何快速实现查看实时数据

在用 Keil 做调试的时候&#xff0c;最让人头秃的是什么&#xff1f; 不是写代码的BUG&#xff0c;而是&#xff1a;这个条件变量是什么情况&#xff1f;为什么没进入这个判断&#xff1f;我代码跑到哪里了&#xff1f; 其实本质上都是通过变量判断代码的执行顺序有没有问题 …...

go实现钉钉三方登录

钉钉的的官方开发文档中只给出了java实现三方登录的&#xff0c;我们准备用go语言来实现 实现网页方式登录应用&#xff08;登录第三方网站&#xff09; - 钉钉开放平台 首先就是按照文档进行操作&#xff0c;备注好网站的信息 获得应用凭证&#xff0c;我们后面会用到 之后…...

YOLOv1 详解:单阶段目标检测算法的里程碑

在目标检测领域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;系列算法凭借其高效性和实用性&#xff0c;成为了行业内的明星算法。其中&#xff0c;YOLOv1 作为 YOLO 系列的开山之作&#xff0c;首次提出了单阶段目标检测的思想&#xff0c;彻底改变了目标检测算…...

5G 核心网切换机制全解析:XN、N2 与移动性注册对比

摘要 本文深入探讨了 5G 核心网中的三种关键切换方式:基于 XN 接口的切换、基于 N2 接口的切换以及移动性注册更新机制。通过对比分析它们的原理、应用场景和技术差异,帮助读者全面理解 5G 网络中用户移动性管理的核心技术。 1. 引言 随着 5G 技术的广泛应用,用户对网络连…...

物流配送优化实战:用遗传算法破解选址难题

在电商与供应链高速发展的今天&#xff0c;物流配送成本优化始终是企业竞争力的核心议题之一。想象一下&#xff0c;当你面对 20 个分布在不同坐标的客户点、7 个可选配送中心和 1 个发件网点时&#xff0c;如何用最省钱的方式完成配送&#xff1f;今天我们就来拆解一个真实的物…...

Linux 个人用户设置账号密码环境变量,四种方式

一、需要明白以下2点&#xff1a; 1、Linux 的环境变量是保存在变量 PATH 中&#xff0c;可通过 Linux shell 命令 echo $PATH 查看输出内容&#xff0c;或者直接输入 export 查看&#xff0c;或者输入 env 查看 2、Linux环境变量值之间是通过冒号进行隔开的( : ) 格式为&am…...