zoukankan      html  css  js  c++  java
  • 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;
    }
    唯有热爱方能抵御岁月漫长。
  • 相关阅读:
    【数据结构第二周】队列知识点整理
    【数据结构第二周】堆栈知识点整理
    【数据结构第二周】线性表知识点整理
    【数据结构第一周】最大子列和问题整理
    网络设置
    QT 安装教程
    C# 复制粘贴板 多行粘贴
    设置网络适配器IP优先级
    MySQL 查重复单号和删重复单号
    Mysql 10053 SocketException 你的主机中的软件中止了一个已建立的连接。
  • 原文地址:https://www.cnblogs.com/syq816/p/12274793.html
Copyright © 2011-2022 走看看