4653. 数位排序

4653. 数位排序

小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。

当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。

例如,2022
排在 409
前面,因为 2022
的数位之和是 6
,小于 409
的数位之和 13


又如,6
排在 2022
前面,因为它们的数位之和相同,而 6
小于 2022


给定正整数 n,m
,请问对 1
到 n
采用这种方法排序时,排在第 m
个的元素是多少?

输入格式
输入第一行包含一个正整数 n


第二行包含一个正整数 m


输出格式
输出一行包含一个整数,表示答案。

数据范围
对于 30%
的评测用例,1≤m≤n≤300

对于 50%
的评测用例,1≤m≤n≤1000

对于所有评测用例,1≤m≤n≤106

输入样例:
13
5
输出样例:
3
样例解释
1
到 13
的排序为:1,10,2,11,3,12,4,13,5,6,7,8,9

第 5
个数为 3

结构体排序

#include<bits/stdc++.h>
using namespace std;

typedef long long int ll;
const int N=1000010;

struct style{
    int num;
    ll sum_num;
};

struct style nums[N];
bool cmp(struct style n1,struct style n2){
    if(n1.sum_num!=n2.sum_num)  return n1.sum_num < n2.sum_num;
    else return n1.num < n2.num;
}

int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;i++){
        nums[i].num=i+1;
        int temp=i+1;
        ll sum=0;
        while(temp) sum+=temp%10,temp/=10;
        nums[i].sum_num=sum;
    }
    sort(nums,nums+n,cmp);
    //for(int i=0;i<n;i++)    cout<<nums[i].num<<" ";
    cout<<nums[m-1].num;
    return 0;
}
posted @ 2023-01-04 10:58  认真游泳的鱼  阅读(46)  评论(0)    收藏  举报