原题解答

本次的题目如下所示(原题出处:蓝桥杯):

【编程实现】

连续输入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)

list排序java_java对list排序_java list 按日期排序

解决了这两个问题,我们最后再来看排序。

方法一(列表的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