给定一系列正整数,请按要求对数字进行分类,并输出以下 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
好了,现在是一个彩笔的心路历程:)
我的第一个思路:
一边分类,一边进行运算,最后揉在一起一下子输出
问题是:
1.每输入一个一个数据就要全部运算一下,牵一发动全身。
2.输出的时候过于混乱。可能我人还没有乱,但是so easy的代码写得让人恶心。
3.因为我首先想到的是以0作为输不输出N的根据。 0啊啊啊啊啊啊啊啊啊,不可以啊啊啊啊啊啊大兄弟! 这么显而易见的坑,我直直地往里面钻… 太傻了这也。
4.知道故障排除可以try…except…。duck不必,而且用得不对。
好了,嘲讽一下我的傻代码:(引以为鉴)(注意是完全错的)
#n = int(input())#个数 -----不能写...别写太顺手了:(
A1 = 0
A2 = 0
A3 = 0
A4 = 0
A5 = 0
B2 = []
B3 = []
B4 = []
B5 = []
m = [int(i) for i in input().split()]
for i in m[1:]:
if i%5 == 0 and i%2==0:
A1+=i
elif i%5==1:#偶数索引数值不变,奇数索引数值*(-1)
B2.append(i)
B2.sort(reverse = True)
for i in B2:
if B2.index(i) %2 == 0:
A2 -= i
else:
A2 +=i
elif i%5 == 2:
B3.append(i)
A3 = len(B3)
elif i%5 == 3:
B4.append(i)
for i in B4:
sum_ += i
A4 = sum_/len(B4)
elif i%5 = 4:
B5.append(i)
maxnum = B5.index(max(B5))
A5 = B5[maxnum]
try :
print("{} {} {} {:.1f} {}".format(A1,A2,A3,A4,A5))
print("{} {} {} {} {}".format(str(A1),str(A2)),str(A3),str(A4),str(A5))
except:
print("{} {} {} {} {}".format(N,N,N,N,N))
我的第二个思路:先分类,在一组一组进行处理,最后再输出。
显然这个时候我的A2还有问题。
正确的代码:
m = [int(i) for i in input().split()]#整数类型
A2 = 0#赋值,便于后面累加
B1 = []
B2 = []
B3 = []
B4 = []
B5 = []
A = []
for i in m[1:]:
t = i % 5
if t == 0 and i % 2 == 0:
B1.append(i)
elif t == 1:
B2.append(i)
elif t == 2:
B3.append(i)
elif t == 3:
B4.append(i)
elif t == 4:
B5.append(i)
if len(B1) > 0:
A.append(str(sum(B1)))
else:
A.append('N')#类型要相同,不能一个字符串一个整数
if len(B2) > 0:#分类别:有元素的和没有元素的,没有的就N了
j = 1
for i in B2:
A2 = A2 + i*j
j = j*(-1)
A.append(str(A2))
else:
A.append('N')
if len(B3) > 0:
A.append(str(len(B3)))
else:
A.append('N')
if len(B4) > 0:
A.append(str(round(sum(B4)/len(B4),1)))
else:
A.append('N')
if len(B5) > 0:
A.append(str(max(B5)))
else:
A.append('N')
#for i in A:#如:A = ['8','0','N','9','6'] 你是想输出i个吗朋友:)
print(A[0],A[1],A[2],A[3],A[4])
我的A2之前一直有问题:
dbq我index()用习惯了
if len(B2) > 0:
for i in B2:
if B2.index(i) % 2 == 0:
A2 += i
else:
A2 -= i
A.append(str(A2))
else:
A.append('N')
A2 部分这样写也可以:
if len(B2) > 0:#分类别:有元素的和没有元素的,没有的就N了
for i in range(len(B2)):
if i % 2 == 0:
A2 = A2 + B2[i]
else:
A2 = A2 + B2[i]*(-1)
A.append(str(A2))
else:
A.append('N')
好了,那么问题在index()身上。
index()的语法 OMG 某人要是知道我语法记错了是不是想打死我
😦
str.index(str, beg=0, end=len(string))
之前没敢用,现在用起来真的爽的简易print
如下:
m = [int(i) for i in input().split()]
A2 = 0
B1 = []
B2 = []
B3 = []
B4 = []
B5 = []
for i in m[1:]:
if i%10 == 0:
B1.append(i)
elif i%5 == 1:
B2.append(i)
elif i%5 == 2:
B3.append(i)
elif i%5 == 3:
B4.append(i)
elif i%5 == 4:
B5.append(i)
print('N' if len(B1) == 0 else str(sum(B1)),end = ' ')
for i in range(len(B2)):
if i % 2 == 0:
A2 += B2[i]
else:
A2 -= B2[i]
print('N' if len(B2) == 0 else str(A2),end= ' ')
print('N' if len(B3) == 0 else str(len(B3)),end=' ')
print('N' if len(B4) == 0 else str(round(sum(B4)/len(B4),1)),end = ' ')
print('N' if len(B5) == 0 else str(max(B5)),end = '')
全剧终。