今天参加华为OD机试,总共有两道机试题,每道题200分,总共400分,华为那边要求是两道题全过。第一道题是磁盘容量排序,其实挺简单的,但我一直没调试好,导致心态直接崩了,后面第二题也没看,看来以后要好好刷题才行。
题目大意
磁盘的容量单位有M、G、T,其关系为 1T = 1000G、1G = 1000M,如样例所示先输入磁盘的个数,再依次输入磁盘的容量大小,然后按照从小到大的顺序对磁盘容量进行排序并输出。
样例输入
3
20M
1T
3G
样例输出
20M
3G
1T
代码实现
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int StrToInt(string str)
{
if (str[str.size() - 1] == 'M') {
return stoi(str.substr(0, str.size() - 1));
} else if (str[str.size() - 1] == 'G') {
return stoi(str.substr(0, str.size() - 1)) * 1000;
} else if (str[str.size() - 1] == 'T') {
return stoi(str.substr(0, str.size() - 1)) * 1000000;
}
return 0;
}
bool Compare(const string &strA, const string &strB)
{
int a = StrToInt(strA);
int b = StrToInt(strB);
// 升序排序
return a < b;
}
int main(void)
{
int n;
while (cin >> n) {
string str;
vector<string> vec;
while (n--) {
cin >> str;
vec.push_back(str);
}
sort(vec.begin(), vec.end(), Compare);
for (auto i : vec) {
cout << i << endl;
}
}
return 0;
}
个人主页: