题目1023:EXCEL排序

题目1023:EXCEL排序

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:9636

解决:2256

题目描述:
    Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。
    对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3 
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
输入:

    测试输入包含若干测试用例。每个测试用例的第1行包含两个整数 N (N<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号。以下有N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。

输出:
    对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3 
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
样例输入:
3 1
000007 James 85
000010 Amy 90
000001 Zoe 60
4 2
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 98
4 3
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 90
0 0
样例输出:
Case 1:
000001 Zoe 60
000007 James 85
000010 Amy 90
Case 2:
000010 Amy 90
000002 James 98
000007 James 85
000001 Zoe 60
Case 3:
000001 Zoe 60
000007 James 85
000002 James 90
000010 Amy 90
参考代码:1 使用Scanner 差点超时
1023 Accepted 159100KB 2292B 2970MS Java / 代码 / 编辑 15:56:29

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main_Scanner {
		
	 private static class Student implements Comparable<Student> {
	        String id;
		 	String name;
	        int mark;
	        int k;
	        public Student(String id, String name, int mark,int k) {
	            this.id = id;
	            this.name = name;
	            this.mark = mark;
	            this.k = k;
	        }
	  
	        public String toString() {
	            return (this.id + " " +this.name+ " "+this.mark);
	        }
	  
	        @Override
	        public int compareTo(Student s1) {
	            if(k==1) return (this.id.compareTo(s1.id));
	        	
	            else if(k==2){
	        		  if (this.name.equals(s1.name)==false)
	  	                return (this.name.compareTo(s1.name));
	  	            else
	  	                return (this.id.compareTo(s1.id));
	        	}
	            
	            else{
	        		  if (s1.mark != this.mark)
	  	                return -(s1.mark - this.mark);
	  	            else
	  	                return (this.id.compareTo(s1.id));
	        	}
	          
	        }
	    }
	
	
	
	public static void main(String arg[]) throws IOException{
		
		Scanner sc = new Scanner(System.in);
		//BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		Integer count=0;
		
		while(sc.hasNext()){
			
			Integer N = sc.nextInt();
			Integer K = sc.nextInt();
			if(N==0 && K==0 ) break;
			String unuse = sc.nextLine();
			
			List<Student> students = new ArrayList<Student>();
			
			//学生列表加入
			for(int i=0;i<N;i++){
				String temp = sc.nextLine();
				String[] str = temp.split(" ");
				Integer mark = Integer.parseInt(str[2]);
				students.add(new Student(str[0],str[1],mark,K));
			}
			
			Collections.sort(students);
			
			count++;
			System.out.println("Case "+count+":");
			for(Student i :students){
				System.out.println(i.toString());
			}
			
			students.clear();
	           
			
		}
	}	
}

参考代码:2 使用BuffRead 时间降下来了
1023 Accepted 147408KB 2421B 2200MS Java / 代码 / 编辑 16:06:10

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.BreakIterator;
import java.util.*;
 
public class Main {
         
     private static class Student implements Comparable<Student> {
            String id;
            String name;
            int mark;
            int k;
            public Student(String id, String name, int mark,int k) {
                this.id = id;
                this.name = name;
                this.mark = mark;
                this.k = k;
            }
       
            public String toString() {
                return (this.id + " " +this.name+ " "+this.mark);
            }
       
            @Override
            public int compareTo(Student s1) {
                if(k==1) return (this.id.compareTo(s1.id));
                 
                else if(k==2){
                      if (this.name.equals(s1.name)==false)
                        return (this.name.compareTo(s1.name));
                    else
                        return (this.id.compareTo(s1.id));
                }
                 
                else{
                      if (s1.mark != this.mark)
                        return -(s1.mark - this.mark);
                    else
                        return (this.id.compareTo(s1.id));
                }
               
            }
        }
     
     
     
    public static void main(String arg[]) throws IOException{
         
        //Scanner sc = new Scanner(System.in);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Integer count=0;
         
        while(true){
            String temp1 = br.readLine();
            String[] temp2 = temp1.split(" ");
            Integer N = Integer.parseInt(temp2[0]);
            Integer K = Integer.parseInt(temp2[1]);
            if(N==0 && K==0 ) break;
            //String unuse = sc.nextLine();
             
            List<Student> students = new ArrayList<Student>();
             
            //学生列表加入
            for(int i=0;i<N;i++){
                String temp = br.readLine();
                String[] str = temp.split(" ");
                Integer mark = Integer.parseInt(str[2]);
                students.add(new Student(str[0],str[1],mark,K));
            }
             
            Collections.sort(students);
             
            count++;
            System.out.println("Case "+count+":");
            for(Student i :students){
                System.out.println(i.toString());
            }
             
            students.clear();
                
             
        }
    }   
}
/**************************************************************
    Problem: 1023
    User: pucklina
    Language: Java
    Result: Accepted
    Time:2200 ms
    Memory:147408 kb
****************************************************************/






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值