蓝桥杯第十三届题解——数位排序

文章讲解了如何利用Python的map和自定义排序功能解决数位和排序问题,涉及map函数的用法和自定义排序算法的应用。

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

#蓝桥杯 #python #map函数 #自定义排序

题目详情

问题描述

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

例如, 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%30% 的评测用例, 1≤m≤n≤3001≤m≤n≤300 。对于

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

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

运行限制

  • 最大运行时间:3s
  • 最大运行内存: 512M

题解代码与分析

代码

# 计算数位和
def disum(num):
  return sum(map(int, str(num)))
  
n, m = int(input()), int(input())
  
ran = list(range(1, n + 1))

# 自定义排序获得想要的结果
ran.sort(key = lambda x : (disum(x), x))

print(ran[m - 1])

分析

由于python的排序用的是归并排序,时间复杂度是nlogn的,并且最大数据范围是1e6
,所以3秒的时间内使用sort排序直接暴力获取即可。

相关知识点

  1. Python内置map函数
  2. Python自定义排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值