zoukankan      html  css  js  c++  java
  • 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();  
        }
        
    
        }
        
         
    }
  • 相关阅读:
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
  • 原文地址:https://www.cnblogs.com/liushuncheng/p/7899128.html
Copyright © 2011-2022 走看看