• NYOJ 8 一种排序(comparator排序)


    一种排序

    时间限制: 3000 ms  |  内存限制: 65535 KB
    难度: 3
     
    描述
    现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大);

    1.按照编号从小到大排序

    2.对于编号相等的长方形,按照长方形的长排序;

    3.如果编号和长都相同,按照长方形的宽排序;

    4.如果编号、长、宽都相同,就只保留一个长方形用于排序,删除多余的长方形;最后排好序按照指定格式显示所有的长方形;
     
    输入
    第一行有一个整数 0<n<10000,表示接下来有n组测试数据;
    每一组第一行有一个整数 0<m<1000,表示有m个长方形;
    接下来的m行,每一行有三个数 ,第一个数表示长方形的编号,

    第二个和第三个数值大的表示长,数值小的表示宽,相等
    说明这是一个正方形(数据约定长宽与编号都小于10000);
    输出
    顺序输出每组数据的所有符合条件的长方形的 编号 长 宽
    样例输入
    1
    8
    1 1 1
    1 1 1
    1 1 2
    1 2 1
    1 2 2
    2 1 1
    2 1 2
    2 2 1
    
    样例输出
    1 1 1
    1 2 1
    1 2 2
    2 1 1
    2 2 1
    来源
    经典题目
    import java.util.Comparator;
    import java.util.Iterator;
    import java.util.Scanner;
    import java.util.TreeSet;
    
    public class Main{//张燚	一种排序	Accepted	 151	 2776	java	08-06 21:56:07 nyoj
    	public static void main(String[] args) {
    		Scanner input=new Scanner(System.in);
    		int N=input.nextInt();
    		while(N-->0){
    			int n=input.nextInt();
    			TreeSet ts=new TreeSet(new SORT());
    			for(int i=0;i<n;i++){
    				int a=input.nextInt();
    				int b=input.nextInt();
    				int c=input.nextInt();
    				if(b<c){
    					int d=b;
    					b=c;
    					c=d;
    				}
    				F f=new F(a,b,c);
    				ts.add(f);
    			}
    			Iterator it=ts.iterator();
    			F f[]=new F[n+1];
    			int e=-1;
    			while(it.hasNext()){
    				F r=(F)it.next();
    				if(e==-1){
    					f[++e]=r;
    				}
    				else if(!(r.bianhao==f[e].bianhao&&r.c==f[e].c&&r.k==f[e].k)){
    					f[++e]=r;
    				}
    			}
    			for(int i=0;i<=e;i++){
    				System.out.println(f[i].bianhao+" "+f[i].c+" "+f[i].k);
    			}
    		}
    	}
    
    	
    }
    class SORT implements Comparator<F>{
    
    	@Override
    	public int compare(F o1, F o2) {
    		if(o1.bianhao>o2.bianhao)
    			return 1;
    		else if(o1.bianhao==o2.bianhao&&o1.c>o2.c)
    			return 1;
    		else if(o1.bianhao==o2.bianhao&&o1.c==o2.c&&o1.k>o2.k)
    			return 1;
    		else
    			return -1;
    	}
    	
    }
    class F{
    	int bianhao,c,k;
    	F(int bianhao,int c,int k){
    		this.bianhao=bianhao;
    		this.c=c;
    		this.k=k;
    	}
    	F(){}
    }


    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.Scanner;
    
    public class Main{//一种排序	Accepted	 215MS	 2771	java	2013-08-07 09:41:06
    	public static void main(String[] args) {
    		Scanner input=new Scanner(System.in);
    		int N=input.nextInt();
    		while(N-->0){
    			int n=input.nextInt();
    			F f[]=new F[n];
    			for(int i=0;i<n;i++){
    				int a=input.nextInt();
    				int b=input.nextInt();
    				int c=input.nextInt();
    				if(b<c){
    					int d=b;
    					b=c;
    					c=d;
    				}
    				f[i]=new F(a,b,c);
    			}
    			Arrays.sort(f,new SORT());
    			for(int i=0;i<n;i++){
    				if(i==0)
    					System.out.println(f[i].bianhao+" "+f[i].c+" "+f[i].k);
    				else if(!(f[i].bianhao==f[i-1].bianhao&&f[i].c==f[i-1].c&&f[i].k==f[i-1].k)){
    					System.out.println(f[i].bianhao+" "+f[i].c+" "+f[i].k);
    				}
    			}
    		}
    	}
    
    	
    }
    class SORT implements Comparator<F>{
    
    	@Override
    	public int compare(F o1, F o2) {
    		if(o1.bianhao>o2.bianhao)
    			return 1;
    		else if(o1.bianhao==o2.bianhao&&o1.c>o2.c)
    			return 1;
    		else if(o1.bianhao==o2.bianhao&&o1.c==o2.c&&o1.k>o2.k)
    			return 1;
    		else
    			return -1;
    	}
    	
    }
    class F{
    	int bianhao,c,k;
    	F(int bianhao,int c,int k){
    		this.bianhao=bianhao;
    		this.c=c;
    		this.k=k;
    	}
    	F(){}
    }


     import java.util.Arrays;
    import java.util.Comparator;
    import java.util.Scanner;
    
    public class Main{//一种排序	Accepted	 313MS	 2771	java	2013-08-07 09:57:57
    	public static void main(String[] args) {
    		Scanner input=new Scanner(System.in);
    		int N=input.nextInt();
    		while(N-->0){
    			int n=input.nextInt();
    			F f[]=new F[n];
    			for(int i=0;i<n;i++){
    				int a=input.nextInt();
    				int b=input.nextInt();
    				int c=input.nextInt();
    				if(b<c){
    					int d=b;
    					b=c;
    					c=d;
    				}
    				f[i]=new F(a,b,c);
    			}
    			Arrays.sort(f,new Comparator<F>(){
    				@Override
    				public int compare(F o1, F o2) {
    					if(o1.bianhao>o2.bianhao)
    						return 1;
    					else if(o1.bianhao==o2.bianhao&&o1.c>o2.c)
    						return 1;
    					else if(o1.bianhao==o2.bianhao&&o1.c==o2.c&&o1.k>o2.k)
    						return 1;
    					else
    						return -1;
    				}
    			});
    			for(int i=0;i<n;i++){
    				if(i==0)
    					System.out.println(f[i].bianhao+" "+f[i].c+" "+f[i].k);
    				else if(!(f[i].bianhao==f[i-1].bianhao&&f[i].c==f[i-1].c&&f[i].k==f[i-1].k)){
    					System.out.println(f[i].bianhao+" "+f[i].c+" "+f[i].k);
    				}
    			}
    		}
    	}
    
    	
    }
    class F{
    	int bianhao,c,k;
    	F(int bianhao,int c,int k){
    		this.bianhao=bianhao;
    		this.c=c;
    		this.k=k;
    	}
    	F(){}
    }


  • 相关阅读:

    字符串比较
    String对象的简单方法(特别讲解length()方法的实现。
    Character类
    线性结构应用实例:多项式加法运算
    队列的顺序和链式存储实现
    堆栈用数组和用链表实现
    广义表和多重链表(十字链表)
    powerDesigner的name和comment转化
    jquery-validate
  • 原文地址:https://www.cnblogs.com/pangblog/p/3243723.html
Copyright © 2020-2023  润新知