原题解答
本次的题目如下所示(原题出处:蓝桥杯):
【编程实现】
连续输入5个正整数(正整数之间以英文逗号隔开),然后将五个正整数按照
从大到小的顺序输出(输出排序后的正整数之间以英文逗号隔开,相同大小的
正整数并列输出)。
输入描述:输入5个正整数以英文逗号隔开
输出描述:将5个正整数按照从大到小的顺序输出,正整数之间英文逗号隔
开
【样例输入】
3,2,5,5,4
【样例输出】
5,5,4,3,2
本题是一个典型的列表排序题。这道题除了排序的问题外,还涉及到两个问题:第一是同一行输入多个数以逗号隔开;第二是同一行输出多个数以逗号隔开。
我们先来解决第一个问题,首先我们可以通过字符串的split()方法将字符串按照分隔符分隔成列表。但是分隔后的列表每个元素类型是字符串。我们可以使用内置的map()函数可以实现对每个元素的类型转换,因此第一行可以写成这样:
a = list(map(int, input().split(',')))
这里面有一个难点,map()函数属于Python内置函数中的高阶函数,相对比较难掌握。如果不会使用map()函数,可以使用稍微繁琐一点的方法,通过循环更改每个元素的数据类型:
a = input().split()
for i in range(len(a)):
a[i] = int(a[i])
下面我们再来解决第二个问题,列表如何输出成以元素之间以逗号隔开的形式。 在函数里面,大家学习过位置参数的概念,在print中如果将列表的变量名称前加*,将会把列表的每个元素作为print()函数里面的参数,print每个参数打印时默认分隔符为空格,我们将它修改成逗号即可,语句格式:
print(*a, sep=',')
如果没有掌握这个操作也没关系,我们还可以排序以后使用join()方法拼凑成字符串打印,但是要注意的是,使用join()方法时,列表所有元素的数据类型必须是字符串:
for i in range(len(a)):
a[i] = str(a[i])
s = ','.join(a)
print(s)
解决了这两个问题,我们最后再来看排序。
方法一(列表的sort()方法):
a = list(map(int, input().split(',')))
a.sort(reverse=True)
print(*a, sep=',')
方法二(内置函数sorted()):
a = list(map(int, input().split(',')))
a = sorted(a, reverse=True)
print(*a, sep=',')
其他方法:
如果不觉得麻烦,除了使用Python自带的方法和函数外,也可以自己写排序的语句,具体参照Python的排序算法和查找算法这篇文章。不过考试和比赛时关键是要能实现相关的功能即可,没必要给自己增加代码量和难度。
本题拓展
该题目主要考查排序的使用以及一行多数据的输入和输出,题目难度:★★
在少儿编程竞赛中,一行输入和输出多数据是经常会出现的问题。如果无法理解map()函数和变量名前面加*这两种写法,也可以将这两行代码熟记于心。对于提高自己的编程效率很有帮助。
针对此类题型list排序java,这里编一道难度略高于原题的题目:
【编程实现】
连续输入10个正整数(正整数之间以英文逗号隔开),然后将奇数和偶数分类。奇数按照从大到小的顺序排序并输出,以逗号隔开;偶数按照从小到大的迅速排列并输出,以逗号隔开。
输入描述:输入10个正整数以英文逗号隔开
输出描述:分两行输出,第一行为排好序的奇数,数字之间英文逗号隔开;第二行为排好序的偶数,数字之间英文逗号隔开
【样例输入】
8,2,5,7,6,1,9,4,10,3
【样例输出】
9,7,5,3,1
2,4,6,8,10
本题与原题相差不大,多了一个分类整理的问题,我们需要新建两个空列表,并对列表中的值进行判断,奇数放入一个列表中list排序java,偶数放入另一个列表中,并分别对两个列表进行排序。
a = list(map(int, input().split(',')))
odd = []
even = []
for i in a:
if i % 2 == 1:
odd.append(i)
else:
even.append(i)
odd.sort(reverse=True)
even.sort()
print(*odd, sep=',')
print(*even, sep=',')
限时特惠:本站每日持续更新海量展厅资源,一年会员只需29.9元,全站资源免费下载
站长微信:zhanting688