1002: 数字排序问题

1002: 数字排序问题

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

题目描述

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

提示

 

来源

5138

#include <iostream>
#include <algorithm>
using namespace std;
struct record
{
 int data;
 int num;
}c[1002];
int main()
{
 int n,i,min,max,k,a[1002],b[1002]={0};
 
 bool compare(record a,record b);
 cin>>n;
 for(i=0;i<n;i++)
 {
   cin>>a[i];
   b[a[i]]++; 
 }
    sort(a,a+n);
 min=a[0];
 max=a[n-1];
 k=0;
 for(i=min;i<=max;i++)
 {
  if(b[i]>0)
  {
    c[k].data=i;
    c[k].num= b[i];
    k++;
  }
 }
 sort(c,c+k,compare);
 for(i=0;i<k;i++)
 cout<<c[i].data<<" "<<c[i].num<<endl;
 
 return 0;
}
bool compare(record a,record b)
{
 if(a.num>b.num)
 return true;
 else if(a.num==b.num)
 {
  if(a.data<b.data)
  return true;
  else
  return false;
 }
 else
 return false;
}

posted @ 2016-08-17 19:22  知我者,足以  阅读(410)  评论(0编辑  收藏  举报