1. 程式人生 > >CSP 201503-2數字排序

CSP 201503-2數字排序

問題描述

給定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的非負整數。

程式碼:

#include<stdio.h>

#define maxN 1010

struct Sdata

{

         int n;

         int num;

}arr[maxN];

int main()

{

         int n,no;

         scanf("%d",&n);

         for(int i=0;i<maxN;i++)

         {

                  arr[i].num=0;

                  arr[i].n=i;

         }      

         for(int i=0;i<n;i++)

         {

                  scanf("%d",&no);

                  arr[no].num++;

         }

         for(int i=0;i<maxN;i++)

         {

                  for(int j=0;j<maxN-i-1;j++)

                  {

                          if(arr[j].num<arr[j+1].num)

                          {

                                   int temp;

                                   temp=arr[j].num;

                                   arr[j].num=arr[j+1].num;

                                   arr[j+1].num=temp;

                                   temp=arr[j].n;

                                   arr[j].n=arr[j+1].n;

                                   arr[j+1].n=temp;

                          }

                  }

         }

         for(int i=0;i<maxN;i++)

                  if(arr[i].num!=0)

                          printf("%d %d\n",arr[i].n,arr[i].num);

         return 0;

}