1 条题解
-
0
问题重述
Ms. Terry是一位学前艺术老师,她喜欢让学生们玩粘土。她的一个任务是将一块粘土塑造成一个长方体,然后测量这个长方体的尺寸。然而,在每一个班级中,总有一个孩子会从另一个孩子那里拿走一些粘土。因为Ms. Terry总是给每个班级的每个孩子相同数量的粘土开始,所以你可以写一个程序来帮助Ms. Terry在测量每个孩子完成的长方体后找到欺负者(bully)和受害者(victim)。
输入
- 输入包含多个班级的数据,最后以一行单独的-1结束。
- 每个班级的第一行是一个整数n,表示班级中的学生数量。
- 接下来的n行,每行包含三个正整数(表示长方体的尺寸)和一个学生的名字。
- 每个班级的学生数量n满足2 ≤ n ≤ 9。
- 每个学生的名字最多8个字符。
- 每个学生最初得到的粘土量最多是250立方单位。
- 每个班级中恰好有一个欺负者和一个受害者。
输出
对于每个班级,输出一行,格式为“”,其中是欺负者的名字,是受害者的名字。
解题思路
- 理解问题:每个学生最初得到的粘土量是相同的。欺负者会从受害者那里拿走一些粘土,因此欺负者的粘土总量会比初始量多,而受害者的粘土总量会比初始量少。其他学生的粘土量应该与初始量相同。
- 初始粘土量:因为所有学生最初得到的粘土量相同,所以可以通过计算每个学生当前粘土块的体积来判断谁多谁少。
- 计算体积:对于每个学生,计算其粘土块的体积(长 × 宽 × 高)。
- 识别欺负者和受害者:
- 欺负者是体积最大的学生。
- 受害者是体积最小的学生。
- 其他学生的体积应该介于这两者之间(但题目保证只有一个是欺负者,一个是受害者,其他都正常)。
- 输出结果:按照指定格式输出欺负者和受害者的名字。
解决代码
while True: n = int(input()) if n == -1: break students = [] volumes = [] for _ in range(n): parts = input().split() a, b, c = map(int, parts[:3]) name = parts[3] volume = a * b * c students.append((name, volume)) volumes.append(volume) max_vol = max(volumes) min_vol = min(volumes) bully = None victim = None for name, vol in students: if vol == max_vol: bully = name if vol == min_vol: victim = name print(f"{bully} took clay from {victim}.")
代码解释
- 输入处理:使用一个无限循环读取输入,直到遇到-1为止。
- 读取班级数据:对于每个班级,读取学生数量n,然后读取每个学生的粘土块尺寸和名字。
- 计算体积:将每个学生的粘土块尺寸相乘得到体积,并存储学生名字和体积。
- 找出欺负者和受害者:通过比较所有学生的体积,找到体积最大的学生(欺负者)和体积最小的学生(受害者)。
- 输出结果:按照指定格式输出欺负者和受害者的名字。
通过这种方法,我们可以准确地识别出每个班级中拿走粘土的欺负者和被拿粘土的受害者。
- 1
信息
- ID
- 548
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者