问题描述

思路
- 使用结构体,其中定义两个成员变量,一个代表整数本身,一个代表该数出现的次数。
struct node{
int pos;//记录数字
int cnt=0;//初始化出现次数
}a[maxn];
- 使用C++自带的sort()函数对结构体根据次数大小进行排序,在此需要按照题目要求自定义排序规则。
题目要求: 按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
bool cmp_cnt(node a,node b)
{
if(a.cnt == b.cnt)
return a.pos < b.pos;
return a.cnt > b.cnt;
}
关于sort()函数可以参考这篇博客:sort()函数
- 使用数组 vis[] 对已经出现过的数进行标记,从而统计不重复的数的个数。
完整代码
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1010;
int vis[maxn] = {0};
struct node{
int pos;//记录数字
int cnt=0;//初始化出现次数
}a[maxn];
bool cmp_cnt(node a,node b)
{
if(a.cnt == b.cnt)
return a.pos < b.pos;
return a.cnt > b.cnt;
}
int main(){
int i, n, x;
int sum = 0; //统计有多少个不重复的个数
cin >> n;
for(i=0;i<n;i++)
{
cin >> x;
if(vis[x]==0)
{
sum++;
vis[x]=1;
}
a[x].pos=x;
a[x].cnt++;
}
sort(a, a+maxn, cmp_cnt);
for( i = 0; i < sum; i++){
cout << a[i].pos << ' ' << a[i].cnt << endl;
}
return 0;
}
提交记录

文章介绍了一种使用C++编程的方法,通过结构体存储整数及其出现次数,利用sort()函数和自定义比较函数cmp_cnt进行排序。当出现次数相同时,依据数值大小决定顺序。程序还统计了不重复的数的个数,并依次输出排序后的结果。
524

被折叠的 条评论
为什么被折叠?



