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();  
        }
        
    
        }
        
         
    }
  • 相关阅读:
    Java CountDownLatch应用
    servlet 表单
    servlet简单方法
    MySQL WHERE
    JavaScript typeof
    JavaScript字符串
    jsp语法
    HTML链接
    2021.3.10
    2021.3.9
  • 原文地址:https://www.cnblogs.com/liushuncheng/p/7899128.html
Copyright © 2011-2022 走看看