码迷,mamicode.com
首页 > 编程语言 > 详细

CCF201503-2数字排序

时间:2020-02-07 22:37:33      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:std   空格   operator   value   ons   遇到   方法   初始   数据   

问题描述
  给定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数字排序

标签:std   空格   operator   value   ons   遇到   方法   初始   数据   

原文地址:https://www.cnblogs.com/syq816/p/12274793.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!