旅游电子商务网站建设目的/网络销售话术900句
【华为OD-E卷 - 磁盘容量排序 100分(python、java、c++、js、c)】
题目
磁盘的容量单位常用的有M,G,T这三个等级,
它们之间的换算关系为1T = 1024G,1G = 1024M,
现在给定n块磁盘的容量,请对它们按从小到大的顺序进行稳定排序,
例如给定5块盘的容量,1T,20M,3G,10G6T,3M12G9M
排序后的结果为20M,3G,3M12G9M,1T,10G6T。
注意单位可以重复出现,上述3M12G9M表示的容量即为3M+12G+9M,和12M12G相等
输入描述
- 输入第一行包含一个整数n(2 <= n <= 100),表示磁盘的个数,
接下的n行,每行一个字符串(长度大于2,小于30),
表示磁盘的容量,由一个或多个格式为mv的子串组成,
其中m表示容量大小,v表示容量单位,例如20M,1T,30G,10G6T,3M12G9M。
磁盘容量m的范围为1到1024的正整数,
容量单位v的范围只包含题目中提到的M,G,T三种,换算关系如题目描述
输出描述
- 输出n行,表示n块磁盘容量排序后的结果
用例
用例一:
输入:
3
1G
2G
1024M
输出:
1G
1024M
2G
用例二:
输入:
3
2G4M
3M2G
1T
输出:
3M2G
2G4M
1T
python解法
- 解题思路:
- 本程序的目标是对存储容量进行排序,输入的存储容量包含 M(MB),G(GB),T(TB) 等单位,排序时需按照实际大小进行比较。
解题步骤
读取输入
n:表示存储设备的数量。
disks:存储容量列表(例如 [“512M”, “2G”, “1T”])。
计算存储单位的实际数值 calculate_value(cap)
遍历字符串 cap 提取数值部分 num_str 和单位部分 M/G/T:
M (MB):保持数值不变。
G (GB):转换为 MB,1G = 1024M。
T (TB):转换为 MB,1T = 1024 × 1024M。
返回统一转换后的 MB 值,作为排序依据。
对 disks 进行排序
使用 sort(),按 calculate_value() 计算的数值排序。
输出排序后的存储容量
逐行打印排序后的 disks
# 读取存储设备数量
n = int(input())# 读取存储容量列表
disks = [input() for _ in range(n)]# 计算存储容量的数值(统一换算为 MB)
def calculate_value(cap):value = 0 # 存储最终的 MB 数值num_str = '' # 临时存储数值部分# 遍历字符串,提取数值和单位for ch in cap:if ch.isdigit():num_str += ch # 累积数值部分else:if ch == 'M': # MB 直接加value += int(num_str)elif ch == 'G': # GB 转换为 MB (1G = 1024M)value += int(num_str) * 1024elif ch == 'T': # TB 转换为 MB (1T = 1024 * 1024M)value += int(num_str) * 1024 * 1024num_str = '' # 重置数值存储return value # 返回统一换算的 MB 值# 按照转换后的数值进行排序
disks.sort(key=calculate_value)# 输出排序后的存储容量
for disk in disks:print(disk)
java解法
- 解题思路
- 本程序的目标是对存储容量进行排序,输入的存储容量包含 M(MB),G(GB),T(TB) 等单位,排序时需按照实际大小进行比较。
解题步骤
读取输入
读取整数 n,表示存储设备的数量。
读取 n 行存储容量信息,并存入 List disks。
计算存储单位的实际数值 computeValue(String capacity)
遍历 capacity 字符串,提取数值部分 number 和单位部分 M/G/T:
M (MB):保持数值不变,乘 1。
G (GB):转换为 MB,1G = 1024M。
T (TB):转换为 MB,1T = 1024 × 1024M。
计算统一转换后的 MB 值,并返回。
对 disks 进行排序
使用 sort() 方法,自定义 Comparator 进行排序,比较 computeValue(a) 和 computeValue(b)。
输出排序后的存储容量
遍历 disks,逐行打印排序后的结果
import java.util.*;public class Main {// 计算存储容量的数值(统一换算为 MB)private static long computeValue(String capacity) {long total = 0; // 存储最终的 MB 数值int multiplier = 0; // 存储当前单位的换算值StringBuilder number = new StringBuilder(); // 存储数值部分// 遍历存储容量字符串,解析数值和单位for (char c : capacity.toCharArray()) {if (Character.isDigit(c)) {number.append(c); // 累积数值部分} else {int num = Integer.parseInt(number.toString()); // 转换数值switch (c) {case 'M': multiplier = 1; break; // MB 直接使用case 'G': multiplier = 1024; break; // GB 转换为 MB (1G = 1024M)case 'T': multiplier = 1024 * 1024; break; // TB 转换为 MB (1T = 1024 * 1024M)}total += num * multiplier; // 计算总值number.setLength(0); // 清空 number,准备解析下一个数值}}return total; // 返回最终的 MB 数值}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(); // 读取存储设备数量sc.nextLine(); // 读取换行符,防止干扰输入List<String> disks = new ArrayList<>();for (int i = 0; i < n; i++) {disks.add(sc.nextLine()); // 读取存储容量}// 按照转换后的数值进行排序disks.sort((a, b) -> Long.compare(computeValue(a), computeValue(b)));// 输出排序后的存储容量for (String disk : disks) {System.out.println(disk);}}
}
C++解法
- 解题思路
- 本程序的目标是对存储容量进行排序,输入的存储容量包含 M(MB),G(GB),T(TB) 等单位,排序时需按照实际大小进行比较。
解题步骤
读取输入
读取整数 n,表示存储设备的数量。
读取 n 行存储容量信息,并存入 vector capacitys。
计算存储单位的实际数值 calc(const string& cap)
遍历 cap 字符串,提取数值部分 num 和单位部分 M/G/T:
M (MB):保持数值不变,乘 1。
G (GB):转换为 MB,1G = 1024M。
T (TB):转换为 MB,1T = 1024 × 1024M。
计算统一转换后的 MB 值,并返回。
对 capacitys 进行排序
使用 sort() 方法,调用 compare() 进行排序,比较 calc(a) 和 calc(b)。
输出排序后的存储容量
遍历 capacitys,逐行打印排序后的结果
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <sstream>using namespace std;// 数字转换函数,替代 C++11 的 stoi
int stringToInt(const string &s) {stringstream ss(s);int num;ss >> num;return num;
}// 计算存储容量的数值(统一换算为 MB)
int calc(const string& cap) {int ans = 0; // 存储最终的 MB 数值string num; // 临时存储数值部分// 遍历存储容量字符串,解析数值和单位for (size_t i = 0; i < cap.size(); ++i) {char c = cap[i];if (isdigit(c)) {num += c; // 累积数值部分} else {if (c == 'M') {ans += stringToInt(num); // MB 直接使用} else if (c == 'G') {ans += stringToInt(num) * 1024; // GB 转换为 MB (1G = 1024M)} else if (c == 'T') {ans += stringToInt(num) * 1024 * 1024; // TB 转换为 MB (1T = 1024 * 1024M)}num.clear(); // 清空 num,准备解析下一个数值}}return ans; // 返回最终的 MB 数值
}// 比较函数,按照存储容量大小排序
bool compare(const string &a, const string &b) {return calc(a) < calc(b);
}// 执行排序并输出结果
void getResult(vector<string> &capacitys) {sort(capacitys.begin(), capacitys.end(), compare); // 按照容量大小排序// 逐行输出排序后的存储容量for (size_t i = 0; i < capacitys.size(); ++i) {cout << capacitys[i] << endl;}
}int main() {int n;cin >> n; // 读取存储设备数量vector<string> capacitys(n);// 读取存储容量for (int i = 0; i < n; ++i) {cin >> capacitys[i];}// 进行排序并输出结果getResult(capacitys);return 0;
}
C解法
更新中
JS解法
解题步骤
读取输入
监听标准输入,每次读取一行并存入 lines 数组。
第一行输入 n,表示存储设备的数量。
读取 n 行存储容量信息,并存入 lines。
当 lines.length === n + 1 时,调用 processDisks(lines) 进行处理。
计算存储单位的实际数值 getCapacity(disk)
使用正则表达式 (\d+)([MGT]) 解析存储容量,提取数值和单位:
M (MB):保持数值不变。
G (GB):转换为 MB,1G = 1024M。
T (TB):转换为 MB,1T = 1024 × 1024M。
计算统一转换后的 MB 值,并返回。
对 disks 进行排序
使用 sort() 方法,按照 getCapacity() 计算的数值排序。
输出排序后的存储容量
遍历 disks,逐行打印排序后的结果
const readline = require("readline");const rl = readline.createInterface({input: process.stdin,output: process.stdout,
});const lines = [];// 监听输入,每次读取一行
rl.on("line", (line) => {lines.push(line);// 判断是否读取完所有输入行(第一行为 n,后续 n 行为存储容量)if (lines.length === parseInt(lines[0], 10) + 1) {lines.shift(); // 移除第一行(n),保留存储容量数据processDisks(lines); // 调用处理函数lines.length = 0; // 清空 lines,准备下一次输入}
});// 处理并排序存储容量
function processDisks(disks) {disks.sort((a, b) => getCapacity(a) - getCapacity(b)) // 按存储容量大小排序.forEach((disk) => console.log(disk)); // 输出排序后的存储容量
}// 计算存储容量的数值(统一换算为 MB)
function getCapacity(disk) {let regex = /(\d+)([MGT])/g; // 正则匹配数值+单位(M、G、T)let result;let total = 0;// 解析存储容量字符串while ((result = regex.exec(disk)) !== null) {let num = parseInt(result[1], 10); // 提取数值部分let unit = result[2]; // 提取单位部分// 根据单位转换为 MBswitch (unit) {case "M":total += num; // MB 直接加break;case "G":total += num * 1024; // GB 转换为 MB (1G = 1024M)break;case "T":total += num * 1024 * 1024; // TB 转换为 MB (1T = 1024 * 1024M)break;}}return total; // 返回最终计算出的 MB 值
}
注意:
如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏
相关文章:

【华为OD-E卷 - 109 磁盘容量排序 100分(python、java、c++、js、c)】
【华为OD-E卷 - 磁盘容量排序 100分(python、java、c、js、c)】 题目 磁盘的容量单位常用的有M,G,T这三个等级, 它们之间的换算关系为1T 1024G,1G 1024M, 现在给定n块磁盘的容量,…...

【大数据技术】编写Python代码实现词频统计(python+hadoop+mapreduce+yarn)
编写Python代码实现词频统计(python+hadoop+mapreduce+yarn) 搭建完全分布式高可用大数据集群(VMware+CentOS+FinalShell) 搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) 本机PyCharm连接CentOS虚拟机 在阅读本文前,请确保已经阅读过以上三篇文章,成功搭建了…...

5-Scene层级关系
Fiber里有个scene是只读属性,能从fiber中获取它属于哪个场景,scene实体中又声明了fiber,fiber与scene是互相引用的关系。 scene层级关系 举例 在unity.core中的EntityHelper中,可以通过entity获取对应的scene root fiber等属性…...

JVM执行流程与架构(对应不同版本JDK)
直接上图(对应JDK8以及以后的HotSpot) 这里主要区分说明一下 方法区于 字符串常量池 的位置更迭: 方法区 JDK7 以及之前的版本将方法区存放在堆区域中的 永久代空间,堆的大小由虚拟机参数来控制。 JDK8 以及之后的版本将方法…...

本地部署 DeepSeek-R1:简单易上手,AI 随时可用!
🎯 先看看本地部署的运行效果 为了测试本地部署的 DeepSeek-R1 是否真的够强,我们随便问了一道经典的“鸡兔同笼”问题,考察它的推理能力。 📌 问题示例: 笼子里有鸡和兔,总共有 35 只头,94 只…...

请求响应(接上篇)
请求 日期参数 需要在前面加上一个注解DateTimeFormat来接收传入的参数的值 Json参数 JSON参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用 RequestBody 标识 通过RequestBody将JSON格式的数据封装到实体类…...

数组排序算法
数组排序算法 用C语言实现的数组排序算法。 排序算法平均时间复杂度最坏时间复杂度最好时间复杂度空间复杂度是否稳定适用场景QuickO(n log n)O(n)O(n log n)O(log n)不稳定大规模数据,通用排序BubbleO(n)O(n)O(n)O(1)稳定小规模数据,教学用途InsertO(n)…...

防火墙的安全策略
1.VLAN 2属于办公区;VLAN 3属于生产区,创建时间段 [FW]ip address-set BG type object [FW-object-address-set-BG]address 192.168.1.0 mask 25 [FW]ip address-set SC type object [FW-object-address-set-SC]address 192.168.1.129 mask 25 [FW]ip address-se…...

2025Java面试题超详细整理《微服务篇》
什么是微服务架构? 微服务框架是将某个应用程序开发划分为许多独立小型服务,实现敏捷开发和部署,这些服务一般围绕业务规则进行构建,可以用不同的语言开发,使用不同的数据存储,最终使得每个服务运行在自己…...

中位数定理:小试牛刀> _ <2025牛客寒假1
给定数轴上的n个点,找出一个到它们的距离之和尽量小的点(即使我们可以选择不是这些点里的点,我们还是选择中位数的那个点最优) 结论:这些点的中位数就是目标点。可以自己枚举推导(很好想) (对于 点的数量为…...

(2025,LLM,下一 token 预测,扩散微调,L2D,推理增强,可扩展计算)从大语言模型到扩散微调
Large Language Models to Diffusion Finetuning 目录 1. 概述 2. 研究背景 3. 方法 3.1 用于 LM 微调的高斯扩散 3.2 架构 4. 主要实验结果 5. 结论 1. 概述 本文提出了一种新的微调方法——LM to Diffusion (L2D),旨在赋予预训练的大语言模型(…...

如何开发一个大语言模型,开发流程及需要的专业知识
开发大型语言模型(LLM)是一个复杂且资源密集的过程,涉及多个阶段和跨学科知识。以下是详细的开发流程和所需专业知识指南: 一、开发流程 1. 需求分析与规划 目标定义:明确模型用途(如对话、翻译、代码生成…...

【数据采集】基于Selenium采集豆瓣电影Top250的详细数据
基于Selenium采集豆瓣电影Top250的详细数据 Selenium官网:https://www.selenium.dev/blog/ 豆瓣电影Top250官网:https://movie.douban.com/top250 写在前面 实验目标:基于Selenium框架采集豆瓣电影Top250的详细数据。 电脑系统:Windows 使用软件:PyCharm、Navicat 技术需求…...

neo4j-在Linux中安装neo4j
目录 切换jdk 安装neo4j 配置neo4j以便其他电脑可以访问 切换jdk 因为我安装的jdk是1.8版本的,而我安装的neo4j版本为5.15,Neo4j Community 5.15.0 不支持 Java 1.8,它要求 Java 17 或更高版本。 所以我需要升级Java到17 安装 OpenJDK 17 sudo yu…...

多无人机--强化学习
这个是我对于我的大创项目的构思,随着时间逐渐更新 项目概要 我们的项目平台来自挑战杯揭绑挂帅的无人机对抗项目,但是在由于时间原因,并未考虑强化学习,所以现在通过大创项目来弥补遗憾 我们项目分为三部分,分为虚…...

UE制作2d游戏
2d免费资产: Free 2D Game Assets - CraftPix.net 需要用到PaperZD插件 官网下载后启用即可 导入png素材 然后全选 - 创建Sprite 创建 人物基类 设置弹簧臂和相机 弹簧臂设置成旋转-90 , 取消碰撞测试 设置子类Sprite 拖到场景中 绑定设置输入映射,让角色移动跳跃 神似卡拉比…...

说一下JVM管理的常见参数
Java虚拟机(JVM)有许多常见参数,用于控制其行为和性能。以下是一些常见的JVM参数及其说明: 1. 内存管理参数 -Xms<size> START 设置初始堆内存大小。例如,-Xms512m表示初始堆大小为512MB。 -Xmx<size>…...

【FPGA】 MIPS 12条整数指令【2】
目录 仿真 代码 完整代码 实现slt 仿真 ori r1,r0,1100h ori r2,r0,0020h ori r3,r0,ff00h ori r4,r0,ffffh addi r5,r0,ffff slt r6,r5,r4 slt r6,r4,r3 代码 EX Slt:regcData ($signed(regaData)<$signed(regbData))?1b1:1b0; ID Inst_slt:be…...

机器学习--python基础库之Matplotlib (2) 简单易懂!!!
python基础库之Matplotlib(2) python基础库之Matplotlib0 准备1 散点图的绘制2 柱状图绘制3 其他 python基础库之Matplotlib 上篇文章机器学习–python基础库之Matplotlib (1) 超级详细!!!主要讲解了python的基础库matplotlib中绘图的流程以及折线图的…...

mybatis plus 持久化使用技巧及场景
mybatis plus提供了很多强大的持久化工具,新手容易对这些工具使用困难,下面我总结了一下mybatis plus持久化的使用技巧及使用场景。 一、持久化 官方文档:https://baomidou.com/guides/data-interface/ (一)通过ser…...

JVM监控和管理工具
基础故障处理工具 jps jps(JVM Process Status Tool):Java虚拟机进程状态工具 功能 1:列出正在运行的虚拟机进程 2:显示虚拟机执行主类(main()方法所在的类) 3:显示进程ID(PID,Process Identifier) 命令格式 jps […...

记录 | 基于MaxKB的文字生成视频
目录 前言一、安装SDK二、创建视频函数库三、调试更新时间 前言 参考文章:如何利用智谱全模态免费模型,生成大家都喜欢的图、文、视并茂的文章! 自己的感想 本文记录了创建文字生成视频的函数库的过程。如果想复现本文,需要你逐一…...

生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (下)
今天小李哥将开启全新的技术分享系列,为大家介绍生成式AI的安全解决方案设计方法和最佳实践。近年来生成式 AI 安全市场正迅速发展。据IDC预测,到2025年全球 AI 安全解决方案市场规模将突破200亿美元,年复合增长率超过30%,而Gartn…...

现场流不稳定,EasyCVR视频融合平台如何解决RTSP拉流不能播放的问题?
视频汇聚EasyCVR安防监控视频系统采用先进的网络传输技术,支持高清视频的接入和传输,能够满足大规模、高并发的远程监控需求。平台灵活性强,支持国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大…...

文献阅读 250205-Global patterns and drivers of tropical aboveground carbon changes
Global patterns and drivers of tropical aboveground carbon changes 来自 <Global patterns and drivers of tropical aboveground carbon changes | Nature Climate Change> 热带地上碳变化的全球模式和驱动因素 ## Abstract: Tropical terrestrial ecosystems play …...

算法与数据结构(括号匹配问题)
思路 从题干可以看出,只要给出的括号对应关系正确,那么就可以返回true,否则返回false。这个题可以使用栈来解决 解题过程 首先从第一个字符开始遍历,如果是括号的左边(‘(‘,’[‘,’}‘&…...

订单状态监控实战:基于 SQL 的状态机分析与异常检测
目录 1. 背景与问题 2. 数据准备 2.1 表结构设计 3. 场景分析与实现 3.1 场景 1:检测非法状态转换...

C# 中记录(Record)详解
从C#9.0开始,我们有了一个有趣的语法糖:记录(record) 为什么提供记录? 开发过程中,我们往往会创建一些简单的实体,它们仅仅拥有一些简单的属性,可能还有几个简单的方法,比如DTO等等…...

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-autobackend.py
autobackend.py ultralytics\nn\autobackend.py 目录 autobackend.py 1.所需的库和模块 2.def check_class_names(names): 3.def default_class_names(dataNone): 4.class AutoBackend(nn.Module): 1.所需的库和模块 # Ultralytics 🚀 AGPL-3.0 License …...

Docker使用指南(一)——镜像相关操作详解(实战案例教学,适合小白跟学)
目录 1.镜像名的组成 2.镜像操作相关命令 镜像常用命令总结: 1. docker images 2. docker rmi 3. docker pull 4. docker push 5. docker save 6. docker load 7. docker tag 8. docker build 9. docker history 10. docker inspect 11. docker prune…...