#include #include #include

using namespace std;

int digitSum(int n) { // 计算数位之和 int sum = 0; while (n > 0) { sum += n % 10; n /= 10; } return sum; }

bool cmp(int a, int b) { // 排序规则 int sum_a = digitSum(a), sum_b = digitSum(b); if (sum_a != sum_b) { return sum_a < sum_b; } else { return a < b; } }

int main() { int n; cin >> n; vector a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } sort(a.begin(), a.end(), cmp); for (int i = 0; i < n; i++) { cout << a[i] << " "; } cout << endl; return 0;

小珅对一个数的数位之和很感兴趣今天他要按照数位之和给序列 a1a2a3……an排序。当两个数各个数位之和不同时将数位和较小的排在前面当数位之和相等时将数值小的排在前面保证所有整数互不相同。例如1001 排在 99 前面因为 1001 的数位之和是 2而 99的数位之和是18又如2 排在 101 前面因为它们的数位之和相同而 2小于 101。请你帮助小珅完成这个任务。c++代码

原文地址: https://www.cveoy.top/t/topic/gvAo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录