数位排序,对sort()函数初步了解。

题目:

        小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。例如,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;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值