题解
2025-04-07 12:23:10
发布于:江苏
先将每个十进制数转换为八进制字符串,注意,转换后的八进制数不应有前导零,然后对于每个八进制数,提取其最低位数字,用于后续排序。使用自定义的比较函数,首先比较最低位数字,若相同则比较八进制数本身的大小。按照排序后的顺序输出八进制数。做出来的方式较为麻烦但是可以看看用了较为基础的做法先进制转换后面再进行排序,时间复杂度较高但这过了。
#include <bits/stdc++.h>
using namespace std;
string to_octal(int x) {
if (x == 0)
return "0";
string s;
while (x > 0) {
s = char(x % 8 + '0') + s;
x /= 8;
}
return s;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<pair<string, int>> arr;
for (int i = 0; i < n; ++i) {
int x;
cin >> x;
string oct = to_octal(x);
int last_digit = oct.back() - '0';
arr.emplace_back(oct, last_digit);
}
sort(arr.begin(), arr.end(), [](const pair<string, int>& a, const pair<string, int>& b) {
if (a.second != b.second) {
return a.second > b.second;
} else {
if (a.first.size() != b.first.size()) {
return a.first.size() < b.first.size();
}
return a.first < b.first;
}
});
for (const auto& p : arr) {
cout << p.first << ' ';
}
cout << '\n';
return 0;
}
这里空空如也
有帮助,赞一个