天天看点

成绩查询系统

数学老师小y 想写一个成绩查询系统,包含如下指令:

    insert [name] [score],向系统中插入一条信息,表示名字为name的学生的数学成绩为score。

    find [name],表示查找名字为name的学生的数学成绩。

注意有些同学可能会为了刷分多次选课,查询的时候给出最大成绩即可。学生的名字是由小写字母组成。成绩是一个 0…1000 \ldots 1000…100 的整数。

老师找到你,想你帮他完成这个系统。

输入格式

输入若干行,每行都是insert [name] [score]或者find [name]的形式,或一行end表示输入结束。输入行数不大于 100010001000,每个学生名字长度不大于 202020 个字符。

输出格式

对于每个查询,输出查询的学生的最高成绩,如果系统中不存在该学生,输出 ?1-1?1。

样例输入

insert zhangsan 90

insert lisi 78

insert xiaoming 86

find xiaoming

find jack

end

样例输出

86

-1

这个题最好的方法应该就是用map的集合框架了。不过用普通的循环条件也是比较简单的。

方法一:map集合框架

static Scanner sc=new Scanner(System.in);
  static int flag=0;
  public static void main(String[] args){
    Test08_2 test=new Test08_2();
    while(true){
      if(flag==1){
        break;
      }
      test.start();
    }
  }
  Map a=new LinkedHashMap<String,Integer>();
  public void start(){
    String string=sc.next();
    if(string.equals("insert")){
      String num1=sc.next();
      int num2=sc.nextInt();
      if(a.containsKey(num1)){
        int a2=(int) a.get(num1);
        num2=Math.max(a2, num2);
      }
      a.put(num1, num2);
    }else{
      if(string.equals("find")){
        String a2=sc.next();
        if(a.containsKey(a2)){
          System.out.println(a.get(a2));
        }else{
          System.out.println(-1);
        }
      }else{
        flag=1;
      }
    }
  }      

方法二:普通循环

public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    String[] i=new String[1000];
    int[] i1=new int[1000];
    int x=0;
    while(true){
      int max=0,flag=0;
      String str1=sc.next();
      if(str1.equals("insert")){
        i[x]=sc.next();
        i1[x]=sc.nextInt();
        x++;
      }
      if(str1.equals("find")){
        String str2=sc.next();
        for(int y=0;y<1000;y++){
          if(i[y]!=null&&i[y].equals(str2)){
            if(i1[y]>max){
              max=i1[y];
              flag=1;
            }
          }
        }
        for(int y1=0;y1<1000;y1++){
          if(flag==1){
            System.out.println(max);
            break;
          }
          else if(flag==0){
            if(i[y1]==null){
              System.out.println(-1);
              break;
            }
          }
        }
      }
      max=0; flag=0;
    }
  }