• 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;
    }
    唯有热爱方能抵御岁月漫长。
  • 相关阅读:
    response输出随机图片、定时刷新网页
    @Transactional注解使用心得
    mybatis缓存(一,二级别)
    数据库四大特性及数据库隔离级别
    mybatis @SelectKey加于不加的区别
    MYSQL索引类型+索引方法
    页面缓存例子
    概率生成模型超越神经网络
    生成学习
    过程量与状态量
  • 原文地址:https://www.cnblogs.com/syq816/p/12274793.html
Copyright © 2020-2023  润新知