• [编程题目]泥塑课


    虽然不是难题,但是我这个菜鸟还是写了三个小时。

    题目:

    小米是一个幼儿园老师,每学期的泥塑课上,她都会给每个学生发不超过250立方厘米的等量橡皮泥,教大家做泥塑。在上课过程中,她发现每个班都恰好有一个小朋友会去抢另一个小朋友的橡皮泥,于是她决定,在正式开始做泥塑前,让大家把手里的橡皮泥都捏成一个立方体,并且测量手里捏好的橡皮泥的长、宽和高。这样,她就可以知道谁被谁抢了橡皮泥了。

    小米老师在不同的学期可能会带一个班或者同时带多个班,因此输入数据可能有一组或者多组。每组输入数据的第一行为一个整数n,表示了这个班的小朋友数,之后n行每行包括了由空格分隔的三个整数和一个字符串,那个字符串表示了小朋友的名字,前面三个整数则是这个学生手里橡皮泥块的长、宽、高数据。按照幼儿园的规定,每个班最多有9个小朋友,最少也要有2个小朋友,每个小朋友在学籍系统中的名称不超过8个字符长。当出现一个班级的小朋友数为-1时,表示没有更多的班级了。

    输出行数与小米老师带的班级数相同,形式为“X took clay from Y.”,具体请参考样例输出。

    解题代码如下:

     1 # coding: utf-8
     2 """
     3 __title__   =  '泥塑课'
     4 __mtime__   =  '15/12/31'
     5 __author__  =  'XueWeihan'
     6 
     7 """
     8 
     9 
    10 def get_input():
    11     """获取控制台输入的值
    12     """
    13     _input = raw_input()
    14     _input = str_to_int(_input)
    15     return _input
    16 
    17 
    18 def str_to_int(str):
    19     try:
    20         return int(str)
    21     except Exception as e:
    22         return str
    23 
    24 
    25 def print_format(max_person, min_person):
    26     print '%s took clay from %s.' % (max_person, min_person)
    27 
    28 
    29 class Student(object):
    30     def __init__(self, name, volume):
    31         self.name = name
    32         self.volume = volume
    33 
    34 
    35 def handle(input_data):
    36     """处理逻辑
    37     """
    38     # gruop_list 存放的是不同班级的list
    39     group_list = [] 
    40     
    41     # class_list 存放的是一个班级中Student的对象
    42     class_list = []
    43     
    44     # i_index 和 e_index用于把每个班级的数据分出来
    45     i_index = 0
    46     for fi_input_list in input_data:
    47         if isinstance(fi_input_list, int):
    48             e_index = i_index + fi_input_list + 1
    49         else:
    50             # 通过切片分出每个班级的数据(因为每个班级的第一个数据都是总数,不需要分析,故+1)
    51             for i in input_data[i_index+1:e_index]:
    52                 # 分析每个同学的数据
    53                 student_data_list = [str_to_int(fi_person_data)
    54                                     for fi_person_data in i.split(' ')]
    55 
    56                 volume = student_data_list[0] * student_data_list[1] * student_data_list[2]
    57                 name = student_data_list[3]
    58                 
    59                 
    60                 studnet = Student(name, volume)
    61                 
    62                 class_list.append(studnet)
    63             if class_list:
    64                 group_list.append(class_list)
    65             i_index = e_index
    66         # 当分析完一个班的数据之后,需要重新把class_list清空
    67         class_list = []
    68     
    69     # 找出每个班级中volume最大和最小的student对象
    70     for fi_group_list in group_list:
    71         max_num = max([fi_class_list.volume for fi_class_list in fi_group_list])
    72         min_num = min([fi_class_list.volume for fi_class_list in fi_group_list])
    73         max_obj = filter(lambda x :x.volume == max_num, fi_group_list)[0]
    74         min_obj = filter(lambda x :x.volume == min_num, fi_group_list)[0]
    75         print_format(max_obj.name, min_obj.name)
    76         
    77         
    78 def main():
    79     input_list = []
    80     while 1:
    81         _input = get_input()
    82         if isinstance(_input, int):
    83             # 当遇到-1时结束
    84             if _input < 0:
    85                 handle(input_list)
    86                 break
    87         input_list.append(_input)
    88 
    89 main()
  • 相关阅读:
    Scala语言
    Eclipse的各种问题
    Java:
    Come on
    问题:实现继承的抽象方法
    Android:报错AndroidManifest.xml file missing
    正则表达式
    Android:相对布局Relativeyout中的属性解释
    Android:生命周期案例
    Android:设置APP全屏、横屏、竖屏、常亮的方法
  • 原文地址:https://www.cnblogs.com/xueweihan/p/5092763.html
Copyright © 2020-2023  润新知