CCF201503-2数字排序
Posted syq816
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF201503-2数字排序相关的知识,希望对你有一定的参考价值。
问题描述
给定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
评测用例规模与约定
1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。
思路:定义一个结构体来包装数据及其计数值,并重写operator<方法,按计数值大小排序,计数值相同的话按序号排序。
#include<iostream> #include<map> #include<algorithm> const int MAX_VALUE = 1001; using namespace std; typedef struct Nums { int num; int count; bool operator <(const Nums &_A)const { if (count > _A.count) //按计数值从大到小排序 return true; if (count == _A.count)//计数值相同的情况下按编号从小到大排序 return num < _A.num; return false; } }Numsinfo,*PNumsinfo; int main17() { int n;//输入数字的个数 cin >> n; Numsinfo nums[MAX_VALUE]; for (int i = 0; i < MAX_VALUE; i++) {//初始化,对序号赋值 nums[i].num = i; nums[i].count = 0; } int x;//输入的数据,输入一个数据,将其对应的序号的计数值加一 for (int i = 0; i < n; i++) { cin >> x; nums[x].count++; } sort(nums, nums + MAX_VALUE);//对数组排序,排序方法即为上面重写的operator<方法,遇到没有出现过的就结束本次循环 for (int i = 0; i < n; i++) { if (nums[i].count == 0) break; cout << nums[i].num << " " << nums[i].count << endl; } system("pause"); return 0; }
以上是关于CCF201503-2数字排序的主要内容,如果未能解决你的问题,请参考以下文章