几种语言的网站如何做,棋牌游戏网站怎么做的,wordpress 漫画主题,中国建设公司排名题目描述
磁盘的容量单位常用的有M#xff0c;G#xff0c;T这三个等级#xff0c;
它们之间的换算关系为1T 1024G#xff0c;1G 1024M#xff0c;
现在给定n块磁盘的容量#xff0c;请对它们按从小到大的顺序进行稳定排序#xff0c;
例如给定5块盘的容量#x…题目描述
磁盘的容量单位常用的有MGT这三个等级
它们之间的换算关系为1T 1024G1G 1024M
现在给定n块磁盘的容量请对它们按从小到大的顺序进行稳定排序
例如给定5块盘的容量1T20M3G10G6T3M12G9M
排序后的结果为20M3G3M12G9M1T10G6T。
注意单位可以重复出现上述3M12G9M表示的容量即为3M12G9M和12M12G相等。
输入描述 输入第一行包含一个整数n(2 n 100)表示磁盘的个数
接下的n行每行一个字符串(长度大于2小于30)
表示磁盘的容量由一个或多个格式为mv的子串组成
其中m表示容量大小v表示容量单位例如20M1T30G10G6T3M12G9M。
磁盘容量m的范围为1到1024的正整数
容量单位v的范围只包含题目中提到的MGT三种换算关系如题目描述。
输出描述 输出n行表示n块磁盘容量排序后的结果。
用例
输入 3 1G 2G 1024M 输出 1G 1024M 2G 说明1G和1024M容量相等稳定排序要求保留它们原来的相对位置故1G在1024M之前。
输入 3 2G4M 3M2G 1T 输出 3M2G 2G4M 1T 说明1T的容量大于2G4M2G4M的容量大于3M2G。
磁盘容量排序算法详解
核心解题思路
本题目要求对多种格式的磁盘容量字符串进行排序核心思路是将所有容量转换为统一单位后再比较。解题分为三个关键步骤
容量字符串解析将复合格式如3M12G9M拆分为多个容量单位子串单位统一转换将所有容量值转换为最小单位M兆字节稳定排序按转换后的数值排序值相同时保持原始输入顺序
关键点说明
单位换算1T 1024G 1024×1024M复合容量处理如3M12G9M 3M 12×1024M 9M稳定排序当容量相等时保持输入原始顺序
完整代码实现
def convert_to_m(capacity_str):将容量字符串转换为以M为单位的总容量total 0 # 总容量单位Mnum_str # 临时存储数字字符串for char in capacity_str:if char.isdigit():# 数字字符累积到数字字符串num_str charelse:# 单位字符处理累积的数字if num_str:num int(num_str)if char T:total num * 1024 * 1024elif char G:total num * 1024elif char M:total numnum_str # 重置数字字符串return totaldef main():n int(input().strip())capacities [input().strip() for _ in range(n)]# 存储原始字符串M单位容量元组converted []for cap in capacities:m_value convert_to_m(cap)converted.append((cap, m_value))# 稳定排序容量相同时保持原始顺序converted.sort(keylambda x: x[1])# 输出结果for cap, _ in converted:print(cap)if __name__ __main__:main()算法原理解析
1. 容量转换函数
def convert_to_m(capacity_str):total 0num_str for char in capacity_str:if char.isdigit():num_str charelse:if num_str:num int(num_str)if char T:total num * 1024 * 1024# ...其他单位处理num_str return total数字累积遍历字符串累积连续数字字符单位转换遇到单位字符时将累积数字转换为对应单位的M值累加求和将所有子串的值累加得到总容量
2. 单位换算系数
单位换算为M的系数T1024×1024 1,048,576G1024M1
3. 稳定排序实现
converted.sort(keylambda x: x[1])使用Python内置的TimSort算法稳定排序仅比较转换后的M值当M值相等时自动保持列表中原有顺序
示例解析
示例1输入3\n1G\n2G\n1024M 容量转换 1G → 1×1024 1024M2G → 2×1024 2048M1024M → 1024×1 1024M 转换后数据 [(1G, 1024), (2G, 2048), (1024M, 1024)]排序过程 1024M和1G值相等(1024)保持输入顺序1G先出现2G值最大(2048) 输出结果 1G
1024M
2G示例2输入3\n2G4M\n3M2G\n1T 容量转换 2G4M → 2×1024 4×1 2048 4 2052M3M2G → 3×1 2×1024 3 2048 2051M1T → 1×1,048,576 1,048,576M 转换后数据 [(2G4M, 2052), (3M2G, 2051), (1T, 1048576)]排序结果 3M2G (2051M)
2G4M (2052M)
1T (1048576M)示例3复合格式3M12G9M 解析过程 3M → 3×1 3M12G → 12×1024 12,288M9M → 9×1 9M总和3 12,288 9 12,300M 等效计算12,300M 12G12M (∵12×102412,288, 12,2881212,300)
总结与拓展
关键知识点
字符串解析分离数字和单位字符单位换算不同存储单位间的转换关系稳定排序保持相等元素的原始顺序复合值处理多部分数值的累加计算
本解法通过以下步骤高效解决问题
精确解析复合容量字符串统一转换为最小单位比较利用稳定排序保持原始顺序输出原始格式结果
初学者可从中学习
字符串遍历和数字累积技巧单位换算的核心算法稳定排序的实际应用复合数值的处理方法 核心启示将复杂格式的数据转换为统一可比较的数值是解决此类排序问题的通用思路。