PAT 数字分类
给定一系列正整数,请按要求对数字进行分类,并输出以下 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
输入样例 2:
8 1 2 4 5 6 7 9 16
输出样例 2:
N 11 2 N 9
a=list(map(int,input().split()[1:])) a1=0 a2=0 k=1 a3=0 sum=0 count=0 b=[] l=0 age,m=0,0 for i in range(len(a)): if a[i]%5==0 and a[i]%2==0: a1+=a[i] elif a[i]%5==1: a2+=a[i]*k k=-k l+=1 elif a[i]%5==2: a3+=1 elif a[i]%5==3: sum+=a[i] count+=1 else: if a[i]%5: b.append(a[i]) if count: age=round(sum/count,1) if b: m=max(b) def printf(t): if t: print(t,end = " ") else: print('N',end = " ") printf(a1) if l: print(a2,end = " ") else: print('N',end = " ") printf(a3) printf(age) if m: print(m) else: print('N')
这个题目倒是也不难,细心按照要求分好类就OK了,不过,如果A4这类数字如果没有,那直接用除法计算平均值就会出现除零异常,这个测试点就通不过,所以,做除法之前,需要先判断一下有没有这类数字;还有如果用Python的max()函数去求一个序列中的最大值,那么这个序列不能为空,所以,也需要做一个判断,其他就没什么了。
还有一个小插曲,我是在牛客网刷题的,然后我发现他们的一个测试点好像有问题:
根据题目的要求,如果某一类数字不存在,则相应输出"N",那对于A2这类数字,就应该它没有,才输出"N",有但是他的和为0(有这么一种情况,因为题目没规定不能输入重复的正整数),就应该输出0,比如这样的简单测试样例:
5 1 1 2 2 2
按照题目要求,应该输出:N 0 3 N N 才是正确的,输出:N N 3 N N 是错误的,但是我试了一下,好像输出这两种情况都可以AC
因为自己是比较菜的,所以害怕自己分析错了,我又去PTA平台试了一下,没想到,我想的竟然是对的,然后我已经向牛客网提交了对这道题目测试点的纠错,挺开心的