1012 数字分类 (20 分)
给定一系列正整数,请按要求对数字进行分类,并输出以下 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
题意不难理解,就是条件比较多,慢慢读就能看明白
我的思路就是按照要求把A1~A5的数放到对应的列表里
然后再取出来输出
ls_in=input().split(' ')
del ls_in[0]
A1=[]
A2=[]
A3=[]
A4=[]
A5=[]
#现在的ls_in是不包括N的剩余部分,且类型为str
s=len(ls_in)
for i in range(s):
ls_in[i]=eval(ls_in[i]) #转换类型
for num in ls_in:
if num%5==0 and num%2==0:
A1.append(num)
if num%5==1:
A2.append(num)
if num%5==2:
A3.append(num)
if num%5==3:
A4.append(num)
if num%5==4:
A5.append(num)
outA1=0
if len(A1)>0:
for num in A1:
outA1+=num
else:
outA1='N'
outA2=0
s_A2=len(A2)
if s_A2>0:
for i in range(s_A2):
if (i+1)%2==1:
outA2+=A2[i]
else:
outA2-=A2[i]
else:
outA2='N'
outA3=0
s_A3=len(A3)
if s_A3>0:
outA3=s_A3
else:
outA3='N'
outA4=0
sumA4=0
if len(A4)>0:
for num in A4:
sumA4+=num
outA4=sumA4/len(A4)
else:
outA4='N'
if len(A5)>0:
outA5=max(A5)
else:
outA5='N'
if type(outA4)!=str:
print(outA1,outA2,outA3,'{:.1f}'.format(outA4),outA5)
else:
print(outA1,outA2,outA3,outA4,outA5)
写的比较长,但是感觉思路挺清晰的
后面的部分因为A4涉及到保留小数点位数的问题,如果A4里面有东西,用format控制一下就好了
如果是空的,就输出N,所以最后输出的时候有两种情况