小蓝对一个数的数位之和很感兴趣, 今天他要按照数位之和给数排序。当 两个数各个数位之和不同时, 将数位和较小的排在前面, 当数位之和相等时, 将数值小的排在前面。
例如, 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])
该问题涉及一个基于数位和与数值大小的排序算法。给定正整数n和m,需要找出按照数位和排序后位于第m个位置的数字。首先计算1到n每个数字的数位和,然后进行两次排序,先按数位和排序,和相等时按数值本身排序。最后输出第m-1个元素,因为列表索引从0开始。
214

被折叠的 条评论
为什么被折叠?



