zoukankan      html  css  js  c++  java
  • CCF系列之数字排序(201503-2)

    问题描述
    试题编号: 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的非负整数。
     
     
    解题思路:
     
    实现代码(c++):
      
     1 #include <utility>
     2 #include <iostream>
     3 #include <map>
     4 #include <iterator>
     5 #include <functional>
     6 
     7 using namespace std;
     8 
     9 int main(){
    10     map<int,int> j;
    11     multimap<int,int,greater<int> > jj;
    12     int n;
    13     cin>>n;
    14     for(int i=0;i<n;i++)
    15     {
    16         int a;
    17         cin>>a;
    18         j[a]++;
    19     }
    20     for(map<int,int>::iterator it = j.begin();it!=j.end();it++)
    21     {
    22         jj.insert(pair<int,int>(it->second,it->first));
    23     }
    24     for(map<int,int>::iterator it = jj.begin();it!=jj.end();it++)
    25     {
    26         cout<<it->second<<" "<<it->first<<endl;
    27     }
    28     return 0;
    29 }
    View Code

    运行结果:

      

    实现代码(java):

      

     1 import java.util.Arrays;
     2 import java.util.Scanner;
     3 
     4 public class NumberPaixu {
     5     public static void main(String[] args) {
     6         Scanner sc = new Scanner(System.in);
     7         int n = sc.nextInt();
     8         int arr[] = new int[n + 1];
     9         display(sort_2(type_arr(input1(arr, sc))));
    10     }
    11 
    12     public static int[] input1(int arr[], Scanner sc) {
    13         int len = arr.length;
    14         for (int i = 0; i < len - 1; i++) {
    15             arr[i] = sc.nextInt();
    16         }
    17         arr[len - 1] = 1001;
    18         return arr;
    19     }
    20 
    21     public static int[][] type_arr(int arr[]) {
    22         Arrays.sort(arr);
    23         int len = arr.length;
    24         int arr_2[][] = new int[len][2];
    25         for (int i = 0; i < arr_2.length; i++) {
    26             for (int j = 0; j < 2; j++) {
    27                 arr_2[i][j] = -1;
    28             }
    29         }
    30         int temp = 0;
    31         int k = 0;
    32         int arr_2_index = 0;
    33         for (int i = 0; i < len; i++) {
    34             if (arr[i] == arr[k]) {
    35                 temp++;
    36                 if (i != len - 1)
    37                     continue;
    38             }
    39             arr_2[arr_2_index][0] = arr[k];
    40             arr_2[arr_2_index][1] = temp;
    41             arr_2_index++;
    42             temp = 0;
    43             k = i;
    44             if (i != len - 1)
    45                 i--;
    46         }
    47         return arr_2;
    48     }
    49 
    50     public static int[][] sort_2(int arr_2[][]) {
    51         int len = arr_2.length;
    52         for (int i = 0; i < len; i++) {
    53             for (int j = 0; j < len - i - 1; j++) {
    54                 if ((arr_2[j][1] < arr_2[j + 1][1])
    55                         || (arr_2[j][1] == arr_2[j + 1][1] && arr_2[j][0] > arr_2[j + 1][0])) {
    56                     int temp = arr_2[j][0];
    57                     arr_2[j][0] = arr_2[j + 1][0];
    58                     arr_2[j + 1][0] = temp;
    59                     temp = arr_2[j][1];
    60                     arr_2[j][1] = arr_2[j + 1][1];
    61                     arr_2[j + 1][1] = temp;
    62                 }
    63             }
    64         }
    65         return arr_2;
    66     }
    67 
    68     public static void display(int arr_2[][]) {
    69         int len = arr_2.length;
    70         for (int i = 0; i < len; i++) {
    71             if (arr_2[i][0] != -1) {
    72                 System.out.println(arr_2[i][0] + " " + arr_2[i][1]);
    73             }
    74         }
    75     }
    76 }
    View Code

    运行结果:

    我的实现代码(java):

     1 package ccf_test2015_03;
     2 
     3 import java.util.HashMap;
     4 import java.util.Iterator;
     5 import java.util.Map;
     6 import java.util.Scanner;
     7 
     8 public class NumberPaixu2 {
     9 
    10     
    11     private static int N ;
    12     
    13     public static void main(String[] args) {
    14         
    15             
    16         Map map = new HashMap();
    17 
    18         Scanner input = new Scanner(System.in);
    19         
    20         N = input.nextInt();
    21         
    22         int[][] number = new int[N][2];
    23         
    24         for(int i = 0; i < N; i++){
    25             
    26             int key = input.nextInt();
    27             
    28             if(map.get(key) != null){
    29                 
    30                 int value = (int) map.get(key);
    31                 
    32                 map.replace(key, value, ++value);
    33                 
    34             }else{
    35                 
    36                 map.put(key, 1);
    37             }
    38         }
    39         int count = 0;
    40          
    41         Iterator entries = map.entrySet().iterator();
    42         
    43         while(entries.hasNext()){
    44             
    45             Map.Entry entry = (Map.Entry) entries.next();  
    46             
    47             int key =  (int) entry.getKey();  
    48             
    49             int value = (int) entry.getValue();  
    50            
    51             number[count][0] =  key;
    52             
    53             number[count++][1] =  value;
    54         }
    55         for(int i = 0; i < count-1; i++){
    56 
    57         
    58             for(int j = 0 ;j < count - i - 1; j++){ 
    59 
    60                 
    61                 if(number[j][1] < number[j + 1][1]){
    62 
    63                     int[] temp = number[j];  
    64                    
    65                     number[j] = number[j + 1];  
    66                     
    67                     number[j + 1] = temp;  
    68                
    69                 }else if(number[j][1] == number[j + 1][1]){
    70                     
    71                     if(number[j][0] > number[j + 1][0]){
    72 
    73                       
    74                         int[] temp = number[j];  
    75                        
    76                         number[j] = number[j + 1];  
    77                        
    78                         number[j + 1] = temp;  
    79                     }
    80                 }  
    81             }
    82         } 
    83         
    84         for(int i = 0; i < count; i++){   
    85             
    86             System.out.println(number[i][0] + "	" + number[i][1]);
    87         }
    88         
    89     }
    90     
    91 }
    View Code

    运行结果:

  • 相关阅读:
    记录MySQL中优化sql语句查询常用的30种方法
    记录分布式和集群的区别
    TCP的三次握手与四次挥手理解及面试题(很全面)
    记录Linux常用命令大全
    DNS解析流程
    dup和dup2用法小结
    c++多态的实现
    linux下常见的字符串处理
    ncurses库的一些函数
    用两个栈实现一个队列
  • 原文地址:https://www.cnblogs.com/haimishasha/p/5331218.html
Copyright © 2011-2022 走看看