欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

CSP201503-2:数字排序

程序员文章站 2022-04-16 10:26:00
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试,针对计算机软件开发、软件测试、信息管理等领域的专业人士进行能力认证。认证对象是从事或将要从事IT领域专业技术与技术管理人 ......

引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试,针对计算机软件开发、软件测试、信息管理等领域的专业人士进行能力认证。认证对象是从事或将要从事IT领域专业技术与技术管理人员,以及高校招考研究生的复试对象。

 

  • 问题描述

  给定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的非负整数。

 

  • 源代码

# include <stdio.h>

# include <stdlib.h>

# include <memory.h>

# include <algorithm>

 

using namespace std;

 

struct group {

    int num; //数字

    int times; //出现的次数

};

 

//比较函数

bool cmp(group a, group b)

{

    if (a.times == b.times)

    {

        return a.num < b.num;

    }

    return a.times > b.times;

}

 

int main(void)

{

    int n; //数字个数

    scanf("%d", &n);

    

    group *pInput = (group *)malloc(sizeof(group) * n);

    //初始化输入数组

    for (int i = 0; i < n; i++)

    {

        pInput[i].num = -1;

        pInput[i].times = 0;

    }

    

    int length = 0;

    for (int i = 0; i < n; i++)

    {

        int tempNum;

        scanf("%d", &tempNum);

        int j = 0;

        int sign = 1;

        while (j < length)

        {

            //如果输入的数字已经存在,直接在time+1

            if (tempNum == pInput[j].num)

            {

                pInput[j].times += 1;

                sign = 0;

                break;

            }    

            j++;        

        }

        if (sign)

        {

            //如果输入的数字不存在,令num = tmepNum

            pInput[length].num = tempNum;

            pInput[length].times = 1;

            length += 1;

        }

    }

    sort(pInput, pInput + length, cmp);

    

    for (int i = 0; i < length; i++)

    {

        printf("%d ", pInput[i].num);

        printf("%d\n", pInput[i].times);

    }

      

    

    free(pInput);

    

    return 0;

}