题目
小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。
当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。
例如,2022 排在 409 前面,因为 2022 的数位之和是 6,小于 409 的数位之和 13。
又如,6 排在 2022 前面,因为它们的数位之和相同,而 6 小于 2022。
给定正整数 n,m,请问对 1 到 n 采用这种方法排序时,排在第 m 个的元素是多少?
输入
输入第一行包含一个正整数 n。
第二行包含一个正整数 m。
输出
输出一行包含一个整数,表示答案。
样例
输入样例:
13
5
输出样例:
3
代码
#include<iostream>
#include<algorithm>
using namespace std;
typedef pair<int,int> PII;
const int N = 1e6+10;
int n,m;
PII p[N];
int getsum(int x){
int sum = 0;
while(x>0){
int tmp = x%10;
x /= 10;
sum += tmp;
}
return sum;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
int sum = getsum(i);
p[i] = {sum,i};
}
sort(p+1,p+n+1);
printf("%d",p[m].second);
}