Python-CCF:20190902 小明种苹果(续)

题目

在这里插入图片描述在这里插入图片描述在这里插入图片描述

用时

读题+分析:15min
写代码:115min

一遍过
其实很简单的,特别是在第一题的基础上修改
至于为什么用了这么长时间写代码
因为我是在火车上用这货写的
墙裂推荐!
贼好用!
随时随地写代码!
还支持pip安装第三方库!
什么时候支持一下PEP8就更爽了
在这里插入图片描述

思路分析

  1. 和第一题比也没增加多少难度,最重要的是:假如后面的新功能做不出来也是有分的!只要按格式输出就可以了。好无语,我来看看能得多少分
  2. 只实现统计最后剩余苹果总数T的,其实就是第一题的微微微微翻版,20分。
  3. 实现统计剩余苹果总数T,和发生掉落的树的数目D,50分
    在这里插入图片描述
  4. 再稍微加几句就全部实现了
    在这里插入图片描述
  5. 提交后也看了看其他博主的思路
    私以为辅助数组的思路并不是很优雅,当然人家从第一题开始就是这样写的
    也有可能是我最近Java或者写工程写多了
    我觉得写一个苹果树的class
    把剩余苹果数、是否掉落等作为苹果树对象的一个属性会更好,在可读性和可扩充性方面都有优势
    不过一道单独的编程题有没有必要用这样长远的眼光去做,见仁见智
    反正我已经习惯这样了,并深以为傲
    在这里插入图片描述
  6. 别的基本没什么,就是最后算连续三棵掉落的组数时用了一下取模,非常非常简单
    要注意的点就是树的棵数小于3的情况
    如果只有一棵树A,那它的前树是A,后树也是A,当树A掉落时,发生掉落的组数为1
    在这里插入图片描述
    如果有两棵树A和B,那A的前树是B,后树也是B。B同。两树都掉落时,发生掉落的组数为2
    在这里插入图片描述

满分代码

class AppleTree:
    apples_num = 0
    droped = False

    def __init__(self, original_apples_num):
        # 初始化一个苹果树对象时传入原有苹果个数
        self.apples_num = original_apples_num

    def operate_tree(self, operation):
        if operation > 0:
            # (重新)统计苹果总数并判断是否有掉落
            if operation != self.apples_num:
                self.droped = True
            self.apples_num = operation
        else:
            # 进行疏果操作
            self.apples_num += operation


if __name__ == "__main__":
    tree_num = int(input())

    tree_objects = []
    # 苹果树对象列表

    for tn in range(tree_num):
        tree_objects.append(AppleTree(0))
        # 初始化一个苹果树对象并添加至列表

        operation_num, operation_list = input().split(" ", 1)
        # 先只分一次把操作次数和多次操作分开
        operation_num = int(operation_num)
        # 得到每棵树的操作次数

        operation_list = list(map(int, operation_list.split(" ")))
        # 然后再把操作分开并分别转为int型

        tree_objects[tn].apples_num = operation_list[0]
        # 初始化苹果数

        operation_list.pop(0)
        # 从操作列表中删掉第一次统计的操作

        for operation in operation_list:
            # 对树对象进行操作
            tree_objects[tn].operate_tree(operation)

    all_apples_count = 0
    # 所有树的苹果总数
    droped_trees_count = 0
    # 发生掉落的苹果树的总数
    group_droped_count = 0
    # 连续三棵有树掉落的组数
    for i in range(len(tree_objects)):
        all_apples_count += tree_objects[i].apples_num
        if tree_objects[i].droped is True:
            droped_trees_count += 1
            pred_tree_object = tree_objects[(i-1) % len(tree_objects)]
            succ_tree_object = tree_objects[(i+1) % len(tree_objects)]
            if pred_tree_object.droped is True and succ_tree_object.droped is True:
                # 连续三棵有掉落
                group_droped_count += 1
    print(all_apples_count, droped_trees_count, group_droped_count)

发布了41 篇原创文章 · 获赞 10 · 访问量 2932
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览