[编程题目]泥塑课
2023-02-18 16:47:47 时间
虽然不是难题,但是我这个菜鸟还是写了三个小时。
题目:
小米是一个幼儿园老师,每学期的泥塑课上,她都会给每个学生发不超过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()
相关文章
- Redis-技术专区-帮从底层彻底吃透RDB技术原理
- Mybatis-技术专区-如何清晰的解决出现「多对一模型」和「一对多模型」的问题
- 🏆【JVM技术专区】「难点-核心-遗漏」TLAB内存分配+锁的碰撞(技术串烧)!
- 🏆【Alibaba微服务技术系列】「Dubbo3.0技术专题」回顾Dubbo2.x的技术原理和功能实现及源码分析(温故而知新)
- 【微服务技术专题】Netflix动态化配置服务-微服务配置组件变色龙Archaius
- 🏆【JVM技术专区】「虚拟机专题」JDK/JVM的新储君—GraalVM和Quarkus
- Alibaba-技术专区-RocketMQ 延迟消息实现原理和源码分析
- 【SpringBoot技术专题】「JWT技术专区」SpringSecurity整合JWT授权和认证实现
- Alibaba-技术专区-Dubbo3总体技术体系介绍及技术指南(目录)
- Alibaba-技术专区-Dubbo3总体技术体系介绍及技术指南(序章)
- SpringBoot-技术专区-用正确的姿势如何用外置tomcat配置及运行(Tomcat优化分析)
- 【SpringCloud技术专题】「原生态Fegin」打开Fegin之RPC技术的开端,你会使用原生态的Fegin吗?(下)
- 【SpringCloud技术专题】「原生态Fegin」打开Fegin之RPC技术的开端,你会使用原生态的Fegin吗?(中)
- 【SpringCloud技术专题】「原生态Fegin」打开Fegin之RPC技术的开端,你会使用原生态的Fegin吗?(上)
- 🏆(不要错过!)【CI/CD技术专题】「Jenkins实战系列」(4)jenkins+pipeline构建自动化部署
- 🏆(不要错过!)【CI/CD技术专题】「Jenkins实战系列」(3)Jenkinsfile+DockerFile实现自动部署
- 【Maven实战技巧】「插件使用专题」Maven-Assembly插件实现自定义打包
- [书单]
- MySQL-技术专题-innodb存储引擎
- 浅谈NIO和Epoll的实现原理