C++ 结构体实现可多宇宙中对于一个整数有特殊的排序方法它们会把这个整数的每一位相加相加的和越大排名越靠前。如果有两个整数各位相加之和一样那么原数字较小的排在前面。输入描述第一行是一个整数 n 0 n 100表示有多少个数;第二行有 n 个整数每个数在 0 到 10000 之间用空格隔开n 个整数互不相同。输出描述输出为 n 行按题目要求的规则对整数进行排序每行一个整数
下面是C++的结构体实现:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Number {
int num;
int sum;
};
bool cmp(Number a, Number b) {
if (a.sum == b.sum) {
return a.num < b.num;
}
return a.sum > b.sum;
}
int main() {
int n;
cin >> n;
vector<Number> numbers(n);
for (int i = 0; i < n; i++) {
cin >> numbers[i].num;
int sum = 0;
int temp = numbers[i].num;
while (temp != 0) {
sum += temp % 10;
temp /= 10;
}
numbers[i].sum = sum;
}
sort(numbers.begin(), numbers.end(), cmp);
for (int i = 0; i < n; i++) {
cout << numbers[i].num << endl;
}
return 0;
}
首先定义了一个结构体Number
,其中包含两个成员变量num
和sum
,分别表示整数和它的每一位相加之和。
然后定义了一个比较函数cmp
,用于排序。根据题目要求,如果两个整数的每一位相加之和相同,则比较它们的原数字大小。
在主函数中,首先读取输入的整数个数n,然后创建一个大小为n的Number
类型的vector。
接下来,通过循环读取n个整数,并计算每个整数的每一位相加之和,存入相应的Number
结构体中。
然后使用sort
函数对numbers
进行排序,排序时使用自定义的比较函数cmp
。
最后,通过循环输出排序后的整数即可
原文地址: http://www.cveoy.top/t/topic/h0oT 著作权归作者所有。请勿转载和采集!