有n个数字,需要将他们按照各位数字之和从大到小的顺序进行排列,如果各位数字之和相同的话,则在按照数值大小,从小到大排列。 输入 第一行输入一个整数n(n<=20000), 表示数据的个数。 第二行输入n个空格隔开的整数,数值不超过100,000,000。 输出 输出一行,n个空格隔开排序后的数据。 输入样例 1 5 321 132 456 345 567 输出样例1 567 456 345 132 321 c++ 代码
时间: 2024-04-19 20:26:34 浏览: 129
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 计算数字的各位数字之和
int calculateSumOfDigits(int num) {
int sum = 0;
while (num > 0) {
sum += num % 10;
num /= 10;
}
return sum;
}
// 自定义比较函数
bool compare(int a, int b) {
int sumA = calculateSumOfDigits(a);
int sumB = calculateSumOfDigits(b);
if (sumA == sumB) {
return a < b;
}
return sumA > sumB;
}
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
sort(nums.begin(), nums.end(), compare);
for (int i = 0; i < n; i++) {
cout << nums[i] << " ";
}
return 0;
}
阅读全文