问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。 输入格式 输入的第一行包含一个整数n,表示给定数字的个数。 输出格式 输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。 样例输入 12 样例输出 3 4 评测用例规模与约定 1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。 |
在我开始分享自己的代码前,请允许我感谢陈瑞杰同学对我的指点以及帮助。为了解决了一个疑惑。
#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 1010
using namespace std;
struct bianhao{
int num; //具体的数据
int id; //具体的编号
}b[N];
bool pp(bianhao m,bianhao n){
return m.num > n.num;
}
int main(){
int n,i,x,j=1;
cin >> n;
int a[N]={0};
for(i=0;i<n;i++){
cin >> x;
a[x]++;
}
for(i=0;i<=N;i++){
if(a[i]!=0){
b[j].id = i;
b[j++].num = a[i]; //具体的次数
}
}
sort(b+1,b+n+1,pp);
int sum = 0;
for(i=1;i<=n+1;i++){
if(sum==n){
break;
}
sum+=b[i].num;
cout <<b[i].id<<' '<<b[i].num<<endl;
}
return 0;
}