PAT02:数字分类

2.数字分类

题目

给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:
A1 = 能被5整除的数字中所有偶数的和;

A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4…;

A3 = 被5除后余2的数字的个数;

A4 = 被5除后余3的数字的平均数,精确到小数点后1位;

A5 = 被5除后余4的数字中最大数字。

输入:每个输入包含1个测试用例。
每个测试用例先输入一个不超过1000的正整数N。
然后给出N个不超过1000的待分类的正整数。数字间以空格分隔。

输出:对给定的N个正整数,按题目要求计算A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。若其中某一类数字不存在,则在相应位置输出“N”。

输入例子:

1
13 1 2 3 4 5 6 7 8 9 10 20 16 18

输出例子:

1
30 11 2 9.7 9

题解

(1)我的解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import sys

for line in sys.stdin:
a1 = []
a2 = []
a3 = []
a4 = []
a5 = []
nums = list(map(int,line.split(' ')))
n = nums[0]
for i in nums[1:]:
if i % 5 == 0 and i % 2 == 0:
a1.append(i)
if i % 5 == 1:
a2.append(i)
if i % 5 == 2:
a3.append(i)
if i % 5 == 3:
a4.append(i)
if i % 5 == 4:
a5.append(i)
if a1:
A1 = sum(a1)
else:
A1 = 'N'

A2 = 0
if a2:
for i,num in enumerate(a2):
A2 += -((-1)**(i+1)*num)
else:
A2 = 'N'

if a3:
A3 = len(a3)
else:
A3 = 'N'

if a4:
A4 = round(sum(a4) / len(a4),1)
else:
A4 = 'N'

if a5:
A5 = max(a5)
else:
A5 = 'N'

print(A1,A2,A3,A4,A5,sep=' ')

(2)其他解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ary = list(map(int, input().split()))
n, ary = ary[0], ary[1:]
A1, A2, A4 = [], [], []
A3, A5 = 0, -1
for i in ary:
if i % 10 == 0:
A1.append(i)
elif i % 5 == 1:
A2.append(i)
elif i % 5 == 2:
A3 += 1
elif i % 5 == 3:
A4.append(i)
elif i % 5 == 4:
if i > A5:
A5 = i
A1 = str(sum(A1)) if A1 else 'N'
A2 = str(sum(A2[::2]) - sum(A2[1::2])) if A2 else 'N'
A3 = str(A3) if A3 else 'N'
A4 = '{:.1f}'.format(sum(A4) / len(A4)) if A4 else 'N'
A5 = str(A5) if A5 != -1 else 'N'
print(' '.join((A1, A2, A3, A4, A5)))

知识点

切片操作

在Python中,对列表进行切片操作时,可以使用[start:stop:step]的形式来指定切片的开始、结束和步长。这里的start表示起始索引,stop表示结束索引(不包含该索引处的元素),step表示步长。计算交错求和的时候,可以计算奇数索引位置上的数字之和减去偶数索引位置上的数字之和。sum(A2[::2])表示求取A2列表中所有偶数索引位置上的数字之和,sum(A2[1::2])表示求取A2列表中所有奇数索引位置上的数字之和。

格式化字符串

'{:.1f}' 是一个格式化字符串,它表示将要格式化的值为浮点数,并保留一位小数。这样的格式化字符串会将浮点数格式化为带有一位小数的字符串。

  • {} 表示一个占位符,用于接受要格式化的值。
  • : 表示格式说明符的开始。
  • .1 表示精度为1,即保留一位小数。
  • f 表示格式化为浮点数。

.format() 方法用于对字符串进行格式化,它可以将指定的值插入到格式化字符串中的大括号处。

' '.join()sep=' '

' '.join() 方法的作用是将序列中的元素以指定的字符连接起来形成一个字符串。根据需要在 ' ' 中间放置任何你想要的分隔符。sep=' 'print() 函数的一个参数,用于指定多个要打印内容之间的分隔符