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平台试了一下,没想到,我想的竟然是对的,然后我已经向牛客网提交了对这道题目测试点的纠错,挺开心的

posted @ 2020-04-02 21:43  极限之旅  阅读(244)  评论(0编辑  收藏  举报