鱼C论坛

 找回密码
 立即注册
查看: 2781|回复: 8

[已解决]计蒜客----泥塑课

[复制链接]
发表于 2016-6-4 17:11:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

输出行数与小米老师带的班级数相同,形式为“X took clay from Y.”,具体请参考样例输出。
输入
  1. 3
  2. 10 10 2 Jill
  3. 5 3 10 Will
  4. 5 5 10 Bill
  5. 4
  6. 2 4 10 Cam
  7. 4 3 7 Sam
  8. 8 11 1 Graham
  9. 6 2 7 Pam
  10. -1
复制代码

输出
  1. Bill took clay from Will.
  2. Graham took clay from Cam.
复制代码


我的程序
  1. zheng=True
  2. while zheng:
  3.     classn=int(input())
  4.     if classn:
  5.         dict_kids=dict()
  6.         for i in range(classn):
  7.             kid=input().split()
  8.             dict_kids[kid[3]]=int(kid[0])*int(kid[1])*int(kid[2])
  9.         max_kid=max(dict_kids.items(),key=lambda v:v[1])[0]
  10.         min_kid=min(dict_kids.items(),key=lambda v:v[1])[0]
  11.         print(max_kid,'took clay from',min_kid,'.')
  12.                
  13.                
  14.     if classn==-1:
  15.         zheng=False
复制代码


我的程序可以运行,可是我的是输入完一个班级就打印一条结果,而要求是输入完所有,再一次性给出结果,这要怎么弄呢?
最佳答案
2016-6-5 11:17:04
本帖最后由 小火木 于 2016-6-5 11:18 编辑
  1. 2
  2. 4  5 6  k
  3. 4 5 7 m
  4. 3
  5. 5 5 5 l
  6. 5 6 7 y
  7. 5 6 8 o
  8. -1
  9. m took clay from k .
  10. o took clay from l .
复制代码

我试了一下,结果是这样的,没有什么问题啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-6-4 20:19:15 | 显示全部楼层
把结果存起来,当输入-1的时候统一打印
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-4 20:42:19 | 显示全部楼层
我看着这些都晕了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-5 08:57:53 | 显示全部楼层
小火木 发表于 2016-6-4 20:19
把结果存起来,当输入-1的时候统一打印

嗯,后来我自己想到了,没循环完一个班就把结果append到一个结果列表,然后输入-1时就打印这个列表.
可是....
可是这题还是没法通过,我也不知道哪里还没有考虑到
修改后的代码如下
  1. who_took_who=[]

  2. while True:
  3.    
  4.     classn=int(input())
  5.    
  6.     if 10>classn>1:
  7.         dict_kids=dict()
  8.         for i in range(classn):
  9.             kid=input().split()
  10.             if len(kid[3])<9 and int(kid[0])*int(kid[1])*int(kid[2])<=250:
  11.                 dict_kids[kid[3]]=int(kid[0])*int(kid[1])*int(kid[2])
  12.         
  13.         max_kid=max(dict_kids.items(),key=lambda v:v[1])[0]
  14.         
  15.         min_kid=min(dict_kids.items(),key=lambda v:v[1])[0]
  16.         
  17.         who_took_who.append((max_kid,min_kid))
  18.   
  19.     elif classn==-1:
  20.        break

  21. for each in who_took_who:
  22.     print(each[0],'took clay from',each[1],'.')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-5 11:17:04 | 显示全部楼层    本楼为最佳答案   
本帖最后由 小火木 于 2016-6-5 11:18 编辑
  1. 2
  2. 4  5 6  k
  3. 4 5 7 m
  4. 3
  5. 5 5 5 l
  6. 5 6 7 y
  7. 5 6 8 o
  8. -1
  9. m took clay from k .
  10. o took clay from l .
复制代码

我试了一下,结果是这样的,没有什么问题啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-5 15:33:17 | 显示全部楼层
小火木 发表于 2016-6-5 11:17
我试了一下,结果是这样的,没有什么问题啊

我是指在计蒜客(www.jisuanke.com)里面的挑战难题这题这么提交上去还是没过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-5 16:27:58 | 显示全部楼层
。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-6-5 20:04:32 | 显示全部楼层
四、Python 支持

问 Python 版本是什么?

答 Python 的版本为 Python 2.7.9。

这是计蒜客使用的版本,你这代码是3.X 语法有的不一样,提交运行不了的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-6 10:56:32 | 显示全部楼层
小火木 发表于 2016-6-5 20:04
四、Python 支持

问 Python 版本是什么?

我发到那里的是2.*的版本的代码,  主要就是将input()  改为  raw_input()    还有是print的括号去掉  其他都一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 17:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表