解题思路
按题目要求排序就好了
C++ 代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair<int, int> pii;
vector<pii> arr; // arr[].first记录原数 arr[].second记录数位和
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; ++ i) {
int tmp = 0; // 记录数位和
int a = i + 1;
while (a) { // 求数位和
tmp += a % 10;
a /= 10;
}
arr.push_back({i + 1, tmp});
}
sort(arr.begin(), arr.end(), [&](const pii& a, const pii& b) {
// 数位之和相等时,将数值小的排在前面
if (a.second == b.second) return a.first < b.first;
// 两个数各个数位之和不同时,将数位和较小的排在前面
return a.second < b.second;
});
int m;
scanf("%d", &m);
printf("%d", arr[m - 1].first);
return 0;
}