CCF201503-2 数字排序 java(100分)

试题编号: 201503-2
试题名称: 数字排序
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
输入格式
  输入的第一行包含一个整数n,表示给定数字的个数。
  第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
  输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
样例输入
12
5 2 3 3 1 3 4 2 5 2 3 5
样例输出
3 4
2 3
5 3
1 1
4 1
评测用例规模与约定
  1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。

问题描述:给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。

package test;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class b_07 {
    
public static void main(String[] args){
    Scanner in=new Scanner(System.in);
    int n=in.nextInt();
    int a[]=new int[n];
    Map map=new HashMap();
    for(int i=0;i<n;i++){
        a[i]=in.nextInt();
        map.put(a[i], i);
    }
    
    int size=map.size();//查看有多少个不重复的数字,使用hashmap
    int ans[][]=new int[size][2];
    int result=0;
    Arrays.sort(a);
    for(int i=n-1;i>=0;i--){
        int count=1;
        if(i==0){
            if(a[i]!=a[i+1]){
             //
                ans[result][0]=a[i];
                ans[result][1]=count;
                result++;
            }
            break;
        }
        while(a[i]==a[i-1]){

            count++;
            i=i-1;
            if(i==0)break ;
        }

        //
        ans[result][0]=a[i];
        ans[result][1]=count;
        result++;
}    

    int temp1=0;
    int temp2=0;
    for(int i=0;i<size;i++){
        for(int j=0;j<size;j++){
            if(ans[i][1]>ans[j][1]){
                temp1=ans[i][0];
                temp2=ans[i][1];
                ans[i][0]=ans[j][0];
                ans[i][1]=ans[j][1];
                ans[j][0]=temp1;
                ans[j][1]=temp2;
            }
        }
    }
    
    
//    for(int i=size-1;i>=0;i--){
//        int count2=1;
//        if(i==0){
//            if(ans[i][1]!=ans[i+1][1]){
//             
////                ans[result][0]=a[i];
////                ans[result][1]=count;
////                result++;
//                count2=1;
//            }
//            break;
//        }
//        while(ans[i][1]==ans[i-1][1]){
//
//            count2++;
//            i=i-1;
//            if(i==0)break ;
//        }
//
//        System.out.println(ans[i][0]+":"+count2);
//        
////        ans[result][0]=a[i];
////        ans[result][1]=count;
////        result++;
//        
//        if(count2>1){
//            int temp3=0;
//            
//            for(int k=i+count2-1;k>=i;k--){
//                for(int j=i+count2-1;j>=i;j--){
//                    if(ans[k][0]<ans[j][0]){
//                        temp1=ans[i][0];
//                        
//                        ans[i][0]=ans[j][0];
//                        
//                        ans[j][0]=temp1;
//                        
//                    }
//                }
//            }
//        }
//    }
    for(int i=0;i<size;i++){  
        for(int j=0;j<2;j++){  
            if(ans[i][j] != 0){  
                System.out.print(ans[i][j]+" ");  
            }  
              
        }  
        System.out.println();  
    }
    int same = 1;  
    int sameTemp = 0;  
    int sameChange = 0;  
    for(int i=0;i<map.size()-1;i++){    //比较的时候如果是逐一比较则不需要
           
         if(ans[i][1] == ans[i+1][1]){  
            same ++;      
         }else{  
            same = 1;  
         }  
         System.out.println("Same:"+same);
         if(same > 1){  
             sameTemp = 0;  
             while( sameTemp != same-1){  
                   
                if(ans[i-sameTemp][0] > ans[i+1-sameTemp][0]){  
                    sameChange = ans[i-sameTemp][0];  
                    ans[i-sameTemp][0] = ans[i+1-sameTemp][0];  
                    ans[i+1-sameTemp][0] = sameChange;   
                }  
                 sameTemp ++;                  
             }  
         }    
    }
    for(int i=0;i<size;i++){  
        for(int j=0;j<2;j++){  
            if(ans[i][j] != 0){  
                System.out.print(ans[i][j]+" ");  
            }  
              
        }  
        System.out.println();  
    }
    

    }
    
     
}
原文地址:https://www.cnblogs.com/liushuncheng/p/7899128.html