蓝桥杯 数位排序

该问题涉及一个基于数位和与数值大小的排序算法。给定正整数n和m,需要找出按照数位和排序后位于第m个位置的数字。首先计算1到n每个数字的数位和,然后进行两次排序,先按数位和排序,和相等时按数值本身排序。最后输出第m-1个元素,因为列表索引从0开始。

数位排序https://www.lanqiao.cn/problems/2122/learning/?page=1&first_category_id=1&sort=students_count&second_category_id=3&tags=2022&name=%E6%95%B0%E4%BD%8D%E6%8E%92%E5%BA%8F

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

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

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

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

 

 

 

答案

n = int(input())
m = int(input())
def cmp(x):
    sum = 0
    for i in str(x):
        sum += int(i)
    return sum

ls = [i for i in range(1, n + 1)]
ls.sort()
ls.sort(key=cmp)

print(ls[m-1])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值