A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

PS:题目转自计蒜客

题目:
小米是一个幼儿园老师,每学期的泥塑课上,她都会给每个学生发不超过250立方厘米的等量橡皮泥,
教大家做泥塑。在上课过程中,她发现每个班都恰好有一个小朋友会去抢另一个小朋友的橡皮泥,
于是她决定,在正式开始做泥塑前,让大家把手里的橡皮泥都捏成一个立方体,并且测量手里捏好的
橡皮泥的长、宽和高。这样,她就可以知道谁被谁抢了橡皮泥了。
小米老师在不同的学期可能会带一个班或者同时带多个班,因此输入数据可能有一组或者多组。
每组输入数据的第一行为一个整数n,表示了这个班的小朋友数,之后n行每行包括了由空格分隔
的三个整数和一个字符串,那个字符串表示了小朋友的名字,前面三个整数则是这个学生手里橡皮泥块
的长、宽、高数据。按照幼儿园的规定,每个班最多有9个小朋友,最少也要有2个小朋友,每个小朋友
在学籍系统中的名称不超过8个字符长。当出现一个班级的小朋友数为-1时,表示没有更多的班级了。
输出行数与小米老师带的班级数相同,形式为“X took clay from Y.”,具体请参考样例输出。
样例输入
3
10 10 2 Jill
5 3 10 Will
5 5 10 Bill
4
2 4 10 Cam
4 3 7 Sam
8 11 1 Graham
6 2 7 Pam
-1
样例输出
Bill took clay from Will.
Graham took clay from Cam.

我的答案见附件
我的写法或许偏于复杂了,可能有更简单的方法,不过——条条大路通罗马,不是么,哈~
游客,如果您要查看本帖隐藏内容请回复

8 个回复

倒序浏览
本帖最后由 李天富 于 2014-11-2 19:04 编辑

  1. import java.util.*;
  2. import java.io.*;
  3. class WhoTakes
  4. {
  5.         public static void main(String[] args) throws IOException
  6.         {
  7.                 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  8.                
  9.                 String line=null;
  10.                 StringBuilder sb=new StringBuilder();

  11.                 while((line=br.readLine())!=null)
  12.                 {
  13.                         if(line.equals("-1"))
  14.                         {
  15.                                 System.out.println(sb);
  16.                                 break;
  17.                         }
  18.                         if(line.length()==1)
  19.                         {
  20.                                 try
  21.                                 {
  22.                                         int num=Integer.parseInt(line);
  23.                                         TreeSet<Student> t=new TreeSet<Student>(new myComparator());
  24.                                         for (int i=0;i<num ;i++ )
  25.                                         {
  26.                                                 String[] s=br.readLine().split(" ");
  27.                                                 Student stu=new Student(Integer.parseInt(s[0]),
  28.                                                                         Integer.parseInt(s[1]),
  29.                                                                         Integer.parseInt(s[2]),
  30.                                                                         s[3]);
  31.                                                 t.add(stu);

  32.                                         }
  33.                                         sb.append(t.last().getName()+" took clay from "+t.first().getName()+".\r\n");
  34.                                         }
  35.                                 catch (Exception e)
  36.                                 {
  37.                                         System.out.println("输入格式不正确!");
  38.                                         break;
  39.                                 }
  40.                                 
  41.                                 
  42.                         }
  43.                         else
  44.                         {
  45.                                 System.out.println("输入格式不正确!");
  46.                                 break;
  47.                         }
  48.                 }
  49.                
  50.                
  51.         }
  52. }
  53. class Student
  54. {
  55.         private int clayL;
  56.         private int clayW;
  57.         private int clayH;
  58.         private int clayV;
  59.         private String name;
  60.         Student(int clayL ,int clayW, int clayH,String name)
  61.         {
  62.                 this.clayL=clayL;
  63.                 this.clayW=clayW;
  64.                 this.clayH=clayH;
  65.                 this.name=name;
  66.                 clayV=clayL*clayW*clayH;
  67.         }
  68.         public String getName()
  69.         {
  70.                 return name;
  71.         }
  72.         public int getClayVolume()
  73.         {
  74.                 return clayV;
  75.         }
  76.         

  77. }
  78. class myComparator implements Comparator<Student>
  79. {
  80.         public int compare(Student s1,Student s2)
  81.         {
  82.                
  83.                 int num=s1.getClayVolume()-s2.getClayVolume();
  84.                 if(num==0)
  85.                         return s1.getName().compareTo(s2.getName());
  86.                 return num;
  87.         }
  88.         
  89. }
复制代码

点评

这想法好牛啊!用比较器来做!!  发表于 2014-11-3 10:10
回复 使用道具 举报
好的。。。
回复 使用道具 举报
嗯,去试一试
回复 使用道具 举报
好吧。。回复看看
回复 使用道具 举报
public class TookClay {
        public static void main(String[] args){
                Student[] class1 = {
                                new Student(10,10,2,"Jill"),
                                new Student(5,3,10,"Will"),
                                new Student(5,5,10,"Bill")
                };
                Student[] class2 = {
                                new Student(2,4,10,"Cam"),
                                new Student(4,3,7,"Sam"),
                                new Student(8,11,1,"Graham"),
                                new Student(6,2,7,"Pam")
                };
                System.out.println(tookTo(class1)+" took clay from "+tookFrom(class1)+".");
                System.out.println(tookTo(class2)+" took clay from "+tookFrom(class2)+".");
        }
        public static int ave(Student[] cla){
                int sum = 0;
                for(Student stu:cla){
                        sum += stu.value();
                }
                return sum / cla.length;
        }
        public static String tookTo(Student[] cla){
                for(int i=0;i<cla.length;i++){
                        if(cla[i].value()>ave(cla))
                                return cla[i].name;
                }
                return null;
        }
        public static String tookFrom(Student[] cla){
                for(int i=0;i<cla.length;i++){
                        if(cla[i].value()<ave(cla))
                                return cla[i].name;
                }
                return null;
        }
}
class Student {
        int l;
        int b;
        int h;
        String name;
        public Student(int l,int b,int h,String name) {
                this.l = l;
                this.b = b;
                this.h = h;
                if(name.length()>8){
                        this.name = name.substring(0, 8);
                } else {
                        this.name = name;
                }
        }
        public int value(){
                return l*b*h;
        }
}

TookClay.zip

727 Bytes, 下载次数: 279

点评

不错不错,不过数据并不是固定的,数据的来源是键盘录入。还是支持!!  发表于 2014-11-2 16:30
回复 使用道具 举报
看看~~题目看起来挺有意思的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马