1012 数字分类 看着很简单昂,到我这就emm...

给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:

A​1​​ = 能被 5 整除的数字中所有偶数的和;
A​2​​ = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n​1​​−n​2​​+n​3​​−n​4​​⋯;
A​3​​ = 被 5 除后余 2 的数字的个数;
A​4​​ = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;
A​5​​ = 被 5 除后余 4 的数字中最大数字。

输入格式:
每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。数字间以空格分隔。
输出格式:
对给定的 N 个正整数,按题目要求计算 A​1​​~A​5​​ 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
若其中某一类数字不存在,则在相应位置输出 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 = '')

全剧终。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值