#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
int n,m;
vector<pair<int,int>>q;
bool cmp(pair<int,int>a,pair<int,int>b){
//据题意如果数位和相等的情况,按second的位置原数排序
if(a.x==b.x)return a.y<b.y;
return a.x<b.x;//正常情况,按first位置排序
}
int SUM(int s){
int sum=0;
while(s){
sum+=s%10;
s/=10;
}
return sum;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<=n;i++){
q.push_back(make_pair(SUM(i),i));
}
sort(q.begin(),q.end(),cmp);
printf("%d",q[m].y);
return 0;
}
根据题意,创建一个存放键值对的动态数组,键值对的first位置存放数位之和,second的位置存放原本的数
1.写一个计算数位之和的函数
2.根据题意写一个排序规则
最后输出即可