题目描述
给定两个整数 n
和 m
,需要对从 n
到 m
的所有整数进行排序。排序规则如下:
- 按照每个数字各位数之和从小到大排序。
- 如果各位数之和相同,则按照数字的大小从小到大排序。
例如:
- 数字
9
排在数字 123
后面,因为 1 + 2 + 3 = 6
而 9
自身的各位数之和是 9
。
- 数字
36
排在数字 9
后面,因为 3 + 6 = 9
,但 36
大于 9
。
题解
为了实现上述排序,我们可以使用 C++ 编写一个程序来完成。主要的思路是:
- 编写一个函数来计算数字的各位数之和。
- 编写一个比较函数,先比较各位数之和,如果相等则比较数字本身的大小。
- 使用
sort
函数进行排序。
以下是完整的 C++ 代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std;
int digitSum(int number) { int sum = 0; while (number) { sum += number % 10; number /= 10; } return sum; }
bool compare(int a, int b) { int sumA = digitSum(a); int sumB = digitSum(b); if (sumA == sumB) { return a < b; } return sumA < sumB; }
int main() { int n, m; cout << "请输入开始的整数n: "; cin >> n; cout << "请输入结束的整数m: "; cin >> m; vector<int> numbers; for (int i = n; i <= m; ++i) { numbers.push_back(i); } sort(numbers.begin(), numbers.end(), compare); cout << "排序后的数字: "; for (int num : numbers) { cout << num << " "; } cout << endl;
return 0; }
|