HNU OJ题库 1002C数字排序问题

来源:互联网 发布:百度人口迁徙数据 编辑:程序博客网 时间:2024/05/17 15:38

问题 C:数字排序问题

时间限制:1 Sec  内存限制:256 MB
提交:1148  解决:789
[提交][状态][讨论版]

题目描述

给定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

代码如下:

#include <iostream>
using namespace std;
int main()
{
    long A[10]={0,1,2,3,4,5,6,7,8,9},C[10]={0},D[10]={0};
    int n,i,j;
    cin>>n;
    int B[100];
    for (i=0;i<n;i++)
    {
        cin>>B[i];
    }
    for (i=0;i<10;i++)
    {
        for (j=0;j<n;j++)
        {
            if (A[i]==B[j])
              C[i]++; 
        }
    }
    for (i=0;i<10;i++)
    {
        D[i]=i;
    }
    //!!!!!!!!
    int m,s=0;
    for (j=0;j<9;j++)
    {
        for(i=0;i<9-j;i++)
        {
            if (C[i]<C[i+1])
            {
                m=C[i];
                C[i]=C[i+1];
                C[i+1]=m;
                s=D[i];
                D[i]=D[i+1];
                D[i+1]=s;
            }
        }
    }
    for (i=0;;i++)
    {
        if (C[i]==0)  break;
        cout<<D[i]<<' '<<C[i]<<endl;
    }
    return 0;
}