ccf_201909-2 小明种苹果(续)-python

题目

在这里插入图片描述

思路

这一题是加强版的小明种苹果。大致思路还是和题目一差不多。边读取边处理。设置一个辅助数组,用以存储该树是否有掉落苹果,方便判断是否有连续三棵树掉落。对于每一棵树,有一个初始化的苹果数量,遇到负值直接加,遇到正值,判断与当前树上剩余苹果数量是否相同,相同则表示没有苹果掉落,继续向下执行,该正值小于当前苹果数,则表示有苹果掉落,更新当前苹果数目,存储该树编号。

代码

代码一(50分)

N  = int(input())  # 苹果棵树

T = 0  # 最终剩的苹果总数
D = 0  # 发生苹果掉落的棵数
E = 0  # 相邻连续三棵树发生掉落的组数


is_fall = [0 for i in range(N)]  # 记录该树是否有掉落 0 无掉落 1 有掉落
for i in range(0, N):

    row = input()
    row = row.rsplit()
    row = list(map(int, row))

    op_num = row[0]  # 操作次数
    cur_num = row[1]  # 当前苹果树的初始数量
    flag = False
    for x in range(2, op_num+1):
        if row[x] < 0:
            cur_num += row[x]
        elif row[x] > 0:
            if cur_num > row[x]:  # 说明发生掉落
                cur_num = row[x]  # 更新苹果数量
                flag = True
    if flag:
        D += 1
        is_fall[i] = 1

    T += cur_num  # 将最终剩余的苹果总数加到T
 for y in range(0, N):  
     if is_fall[y%N] == is_fall[(y+1)%N] == and is_fall[(y+2)%N] == 1:
         print(y%N,(y+1)%N, (y+2)%N)
         E += 1

print(T, D, E) 

个人觉得这个代码是没有问题的,测试案例也过。至于为甚么50分,在下面说一下。

代码二 (100分)

N  = int(input())  # 苹果棵树

T = 0  # 最终剩的苹果总数
D = 0  # 发生苹果掉落的棵数
E = 0  # 相邻连续三棵树发生掉落的组数


is_fall = [0 for i in range(N)]  # 记录该树是否有掉落 0 无掉落 1 有掉落
for i in range(0, N):

    row = input()
    row = row.rsplit()
    row = list(map(int, row))

    op_num = row[0]  # 操作次数
    cur_num = row[1]  # 当前苹果树的初始数量
    flag = False
    for x in range(2, op_num+1):
        if row[x] < 0:
            cur_num += row[x]
        elif row[x] > 0:
            if cur_num > row[x]:  # 说明发生掉落
                cur_num = row[x]  # 更新苹果数量
                flag = True
    if flag:
        D += 1
        is_fall[i] = 1

    T += cur_num  # 将最终剩余的苹果总数加到T
for i in range(len(is_fall)):
    pre=i-1
    if pre<0:
        pre+=len(is_fall)
    next=i+1
    if next > len(is_fall)-1:
        next-=len(is_fall)
    if is_fall[pre]==is_fall[i]==is_fall[next]==1:
        E+=1

print(T, D, E)

总结

现在对比一下其实可以看到之前的代码为甚么是50分了。代码本来求余来处理环是没有问题。但是我没有考虑到 如果树的数目少于3个,那这样处理是有问题的。当树的数目不够三个时,E = 0 即可。

修改如下 也是100分

if N >= 3:  # 苹果树少于三棵时  直接为0
    for y in range(len(is_fall)):
        if is_fall[y%len(is_fall)] == is_fall[(y+1)%len(is_fall)] == is_fall[(y+2)%len(is_fall)] == 1:
            
            E += 1
发布了56 篇原创文章 · 获赞 42 · 访问量 43万+

猜你喜欢

转载自blog.csdn.net/SIMPLE1995/article/details/103252036