题目:
小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。例如,2022 排在 409 前面,因为2022的数位之和是6,小于 409 的数位之和13。又如,6排在 2022 前面,因为它们的数位之和相同,而6小于2022。给定正整数n,m,请问对1到n采用这种方法排序时,排在第m个的元素是多少?
#include <bits\stdc++.h>
using namespace std;
const int N=1e6+10;
int b[N];
int a[N];
bool cmp(int x,int y){//这个里面x,y被传递的是索引值
return (b[x]<b[y]) || (b[x]==b[y]&&x<y);
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
int num=i;
a[i]=i;
while(num){
b[i]+=num%10;
num/=10;
}
}
sort(a+1,a+1+n/*索引范围*/,cmp);//简单来说就是通过自定义的cmp来排序.”“a+1打印出来是十六进制的数因该是它的地址。”
//sort运行理解比较复杂,(for me)所以只要抽象的理解成:自定义的cmp能把你希望排序的数组排好就好。
cout<<a[m]<<endl;
return 0;
}