问题描述
试题编号: | 201503-2 |
试题名称: | 数字排序 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。 输入格式 输入的第一行包含一个整数n,表示给定数字的个数。 输出格式 输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。 样例输入 12 样例输出 3 4 评测用例规模与约定 1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。 |
代码展示:
#include<iostream>
#include<algorithm>
#include<vector>
#define N 1000
using namespace std;
struct Number{
int num;
int t; //出现次数
};
bool cmp(Number n1,Number n2)
{
if(n1.t==n2.t)
return n1.num<n2.num;
else
return n1.t>n2.t;
}
int main()
{
int a[N];
vector<Number> s;
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
a[n]=1001;
sort(a,a+n+1);
Number number;
int x=1;
for(int i=0;i<n;i++){
if(a[i+1]-a[i]!=0){
number.num=a[i];
number.t=x;
s.push_back(number);
x=1;
}else{
x++;
}
}
sort(s.begin(),s.end(),cmp);
for(int i=0;i<s.size();i++){
cout<<s[i].num<<" "<<s[i].t<<endl;
}
return 0;
}