uva 10763

解决思路是排序,第一次按A排,第二次按B排,然后比较两次结果就可以了

package test;

import java.util.Arrays;
import java.util.Comparator;



public class Test{
	//学生选择A,B学校
	static class AB{
		int A;
		int B;
		public AB(int a, int b) {			
			A = a;
			B = b;
		}		
		
		@Override
		public String toString() {			
			return "["+A+","+B+"]";
		}
	}
	static int n = 10;//学生数目
	static AB[] abs = new AB[n];//学生数组
    public static void main(String[] args) { 
    	//伪数据
        abs[0] = new AB(1,2);
        abs[1] = new AB(1,9);
        abs[2] = new AB(2,5);
        abs[3] = new AB(5,2);
        abs[4] = new AB(9,1);
        abs[5] = new AB(7,3);
        abs[6] = new AB(5,4);
        abs[7] = new AB(3,7);
        abs[8] = new AB(4,5);
        abs[9] = new AB(2,1);
         
        /**
         * 第一次排序,先按A,在按B,从小到大
         */
        Arrays.sort(abs, new Comparator() {

			@Override
			public int compare(AB o1, AB o2) {
				if(o1.A>o2.A){
					return 1;
				}else if(o1.A==o2.A){
					if(o1.B>o2.B)
						return 1;
					return -1;
				}else{
					return -1;
				}
			}
		});
        AB[] abs1 = abs.clone();
        System.out.println(Arrays.toString(abs1));
        
        /**
         * 第二次排序,先按B,在按A,从小到大
         */
        Arrays.sort(abs, new Comparator() {

			@Override
			public int compare(AB o1, AB o2) {
				if(o1.B>o2.B){
					return 1;
				}else if(o1.B==o2.B){
					if(o1.A>o2.A)
						return 1;
					return -1;
				}else{
					return -1;
				}
			}
		});
        System.out.println(Arrays.toString(abs));
        
        //比较
        for(int i=0;i


你可能感兴趣的:(java,算法与数据结构)