目录
题目链接:
思路:
代码:
题目链接:
0数位排序 - 蓝桥云课 (lanqiao.cn)
思路:
自定义排序比较函数
用一个函数来求某个数的数位和 sum()
用一个函数,自定义排序比较函数 cmp()
两个功能函数 和 一个主函数
因为要用排序函数sort,所以把每个数都存在数组a中。
因为要比较某个数的数位和,知道这个数,就要知道他的数位和,所以把每个数的数位和都放在它对应的数组中。把数字和其数位和联系起来。
又因为数字是从1到n,所以直接把数位和数组的下标和数组联系起来。这样也就是把数字和其数位和联系起来了。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N],b[N];
int sum(int x){ //用函数sum求x的数位和
int ans=0;
while(x){
ans+=x%10;
x/=10;
}
return ans;
}
bool cmp(int x,int y){ //自定义比较,数位和小的在前面
if(b[x]==b[y]){
return x<y;
}
return b[x]<b[y];
}
int main(){
int n,m;
cin>>n>>m; //对1~n进行排序,问排在第m的元素是多少
for(int i=1;i<=n;i++){
a[i]=i; //a数组是每个数
b[i]=sum(i); //b数组是每个数的数位和
}
sort(a+1,a+1+n,cmp);
cout<<a[m]<<endl;
return 0;
}