蓝桥c++数位排序(运用pair解决)

该程序解决了一个数学问题,即根据数位之和对正整数进行排序,当数位和相等时按数值大小排序。给定正整数n和m,程序计算并输出第m个元素。示例中,对于n=13和m=5,输出结果为3。代码使用C++编写,通过创建pair存储每个数及其数位和,然后进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

小蓝对一个数的数位之和很感兴趣, 今天他要按照数位之和给数排序。当 两个数各个数位之和不同时, 将数位和较小的排在前面, 当数位之和相等时, 将数值小的排在前面。

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

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

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

输入格式

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

第二行包含一个正整数 m 。

输出格式

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

样例输入">样例输入

13
5

样例输出

3

样例说明

1 到 13 的排序为: 1,10,2,11,3,12,4,13,5,6,7,8,91,10,2,11,3,12,4,13,5,6,7,8,9 。第 5 个数为 3 。

评测用例规模与约定

对于 30% 的评测用例, 1≤m≤n≤300 。

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

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

#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
pair<long long int,long long int>pa[1000008];
long long int a[1000008],sum[1000008];
int main()
{
	long long int n,m,s,k;
	cin>>n>>m;
	for(int i=0;i<n;i++){
		a[i]=i+1;
		pa[i].second=a[i];//把数存到second 
	}
	for(int i=0;i<n;i++){
		s=a[i];
		while(s){
			sum[i]+=s%10;
			s=s/10;
		}
	pa[i].first=sum[i];//把数位之和存到first	
	}
	sort(pa,pa+n);//排序 
		cout<<pa[m-1].second<<" ";//输出第m个		
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张立龙666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值