Python-CCF:20190901 小明种苹果

文章目录

    • 题目
    • 用时
    • 思路分析
    • 满分代码

题目

Python-CCF:20190901 小明种苹果_第1张图片Python-CCF:20190901 小明种苹果_第2张图片

用时

读题+分析:10min
写代码:70min

虽然是一遍过,但不是很满意,用时太长了
不过考虑到是隔了好久再做CSP,手生是正常的
毕竟和平时写爬虫写Django不一样,CSP对细节的要求更高,稍有不慎失去的可能就是几十分
所以大体来说差强人意吧

思路分析

  1. 输入分析
    Python-CCF:20190901 小明种苹果_第3张图片
    第一个3是指3棵苹果树
    第二个3是指修剪每棵苹果树修剪3轮
    这里容易受到误导,一定注意
    73是指第一棵树开始时有73个苹果
    -8、-6、-4分别是每轮修剪8个、6个、4个
    下同
  2. 数据结构分析
    每棵苹果树都有
    属性:树的编号、苹果个数、被修剪苹果的总数
    方法:修剪,传入参数为每次修剪的个数
    很自然的想到用类和对象去写
  3. 其他注意事项
    输出的编号是从1开始的,也就是说没有第0棵树这种说法,如果想用下标表示编号一定要注意
    第二个输入示例中涉及到了相同元素的排序顺序,Python的sort方法是稳定的,正好符合要求
    输入的修剪个数为非正数,所以定义修剪方法时要分清加减号

满分代码

class AppleTree:
    tree_name = 0
    apples_num = 0
    cut_sum = 0

    def __init__(self, original_apples_num, tree_name):
        # 初始化一个苹果树对象时传入原有苹果个数和编号(注意:从1开始)
        self.apples_num = original_apples_num
        self.tree_name = tree_name

    def cut_apples(self, cut_num):
        self.apples_num += cut_num
        # 苹果数减少,因为传入cutnum为非正数
        self.cut_sum -= cut_num
        # 总的被修剪的个数增加


if __name__ == "__main__":
    tree_num, cut_round = input().split(" ")
    tree_num = int(tree_num)
    cut_round = int(cut_round)

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

    for tn in range(tree_num):
        tree_objects.append(AppleTree(0, tn + 1))
        # 以苹果数为0,传入名字为tn + 1初始化一个苹果树对象并添加至列表

        original_apples_num, cut_num_list = input().split(" ", 1)
        # 先只分一次把原始苹果数和多次修剪的个数分开
        original_apples_num = int(original_apples_num)
        # 得到每棵树的原始苹果数

        cut_num_list = list(map(int, cut_num_list.split(" ")))
        # 然后再把修剪个数分开并分别转为int型

        tree_objects[tn].apples_num = original_apples_num
        # 修改苹果树对象的初始苹果数

        for cut_num in cut_num_list:
            # 修剪一棵树cut_round轮,即cut_num_list的长度
            tree_objects[tn].cut_apples(cut_num)

    all_apples_count = 0
    for to in tree_objects:
        all_apples_count += to.apples_num
    # 计算所有苹果树的苹果总数

    tree_objects.sort(key=lambda i: i.cut_sum, reverse=True)
    # lambda的优雅用法:对对象数组、字典等根据某一特定项大小进行逆序稳定排序

    print(all_apples_count, tree_objects[0].tree_name, tree_objects[0].cut_sum)

你可能感兴趣的:(Python-CCF)