正经题解|最大硬盘
2024-09-19 13:57:51
发布于:浙江
19阅读
0回复
0点赞
题解:最大硬盘
题目分析
题目要求我们从多个硬盘的列表中,找到存储容量最大的硬盘,并输出其信息。每个硬盘的存储单位可能是 GB
、MB
、KB
或 B
,这些单位的换算规则是基于十进制的(与硬盘制造商的习惯一致)。
硬盘大小不一致,且单位不同,直接比较数值是不可行的,因此我们需要将所有硬盘的大小统一换算为一个标准单位——字节数,然后进行比较。
解题思路
更希望大家能用到一些语言上的特性,对于不同单位进行比较大小特别适合用重载运算符做。
-
数据结构设计:
- 我们定义一个
Disk
结构体,包含硬盘的三个属性:size
: 表示硬盘的数值部分。unit
: 表示硬盘的存储单位(如GB
,MB
,KB
,B
)。Bytes
: 表示该硬盘的存储容量统一换算为字节数。
- 我们定义一个
-
单位转换:
1 GB = 1000000000 B
1 MB = 1000000 B
1 KB = 1000 B
1 B = 1 B
我们需要定义一个函数
convertToBytes()
,将不同单位的存储容量转换成字节数。 -
重载运算符:
- 为了方便比较硬盘的大小,我们对
Disk
结构体重载了<
运算符。这样可以在后续使用max_element
函数时,直接根据Bytes
字段进行比较,找到最大的硬盘。
- 为了方便比较硬盘的大小,我们对
-
遍历输入:
- 首先读取硬盘的数量 ,然后依次读取每个硬盘的大小和单位,计算并存储它的字节数。
-
寻找最大值:
- 使用
std::max_element
函数找到字节数最大的硬盘,并输出该硬盘的原始大小和单位。
- 使用
AC代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
// 定义硬盘结构体
struct Disk {
ll size; // 存储大小
string unit; // 存储单位
ll Bytes; // 转换为字节数后的大小
// 重载小于运算符,用于根据字节数比较
bool operator<(const Disk &other) const {
return Bytes < other.Bytes;
}
};
// 将硬盘的存储单位转换为字节数
ll convertToBytes(Disk cur) {
if (cur.unit == "GB") return cur.size * 1000000000;
if (cur.unit == "MB") return cur.size * 1000000;
if (cur.unit == "KB") return cur.size * 1000;
if (cur.unit == "B") return cur.size;
return 0;
}
int main() {
int n;
cin >> n; // 输入硬盘数量
vector<Disk> disks(n); // 定义存储硬盘信息的数组
// 读取每个硬盘的信息
for (int i = 0; i < n; ++i) {
cin >> disks[i].size >> disks[i].unit; // 输入硬盘大小和单位
disks[i].Bytes = convertToBytes(disks[i]); // 将硬盘大小转换为字节数
}
// 找到字节数最大的硬盘
Disk maxDisk = *max_element(disks.begin(), disks.end());
// 输出最大硬盘的原始大小和单位
cout << maxDisk.size << " " << maxDisk.unit << endl;
return 0;
}
这里空空如也
有帮助,赞一个