
ny540 奇怪的排序 简单题
读取输入,获取测试用例数量N。 对于每个测试用例,读取A和B。 生成区间[A, B]的所有数字。 对每个数字生成反转后的键。 根据反转后的键对数字排序。 输出排序后的数字。 读取N。 循环读取每个A和B。 生成从A到B的数字列表。 定义函数生成反转键。 排序列表,使用反转键作为排序依据。 输出排序后的数字。
发布日期:2025-04-22 12:40:47
浏览次数:4
分类:精选文章
本文共 1154 字,大约阅读时间需要 3 分钟。
Bill机器人对自然数的理解与人类不同,它从右往左读数。例如,它会将123理解为321。现在,给定两个数A和B,我们需要生成[A, B]区间中的所有数,并按照Bill的规则排序。
首先,理解Bill的排序规则。Bill从右到左读取数字,导致它对数字的比较基于数字反转后的值。例如,23变成32,15变成51,Bill认为15大于23,因为51 > 32。
接下来,如何模拟Bill的排序?我们需要对每个数字生成反转后的值,并按这些值排序。例如,数字10反转后是01,即1,数字9反转后是9,数字12反转后是21。因此,排序将基于反转后的数值。
解决步骤:
编写代码时,需要考虑如何高效生成反转键。由于区间长度最多为51,可以直接生成列表并用反转键排序。
Python实现:
测试样例: 输入:28 1522 39 区间数字:28, 29, 30, ..., 39 反转键:82, 92, 03, 13, 14, ..., 93 排序后:10, 8, 9, 11, 12, 13, 14, 1530, 31, 22, 32, 23, 33, 24, 34, 25, 35, 26, 36, 27, 37, 28, 38, 29, 39
最终代码:
import sysdef reverse_num(x): res = 0 while x > 0: res = res * 10 + x % 10 x = x // 10 return resdef main(): n = int(sys.stdin.readline()) for _ in range(n): a, b = map(int, sys.stdin.readline().split()) nums = list(range(a, b+1)) nums.sort(key=reverse_num) print(' '.join(map(str, nums)))if __name__ == "__main__": main()
输出: 10 8 9 11 12 13 14 1530 31 22 32 23 33 24 34 25 35 26 36 27 37 28 38 29 39
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月24日 01时09分02秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!