• CSP201503-2:数字排序


    引言: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 ", pInput[i].times);

        }

          

        

        free(pInput);

        

        return 0;

    }

  • 相关阅读:
    5个有趣且不必要的 JavaScipt 技巧
    动态规划的原理?
    如何避免出现failfast?
    动态规划的原理?
    jsp文件导包
    程序突击
    monthly report
    weekly review: 细节决定一切
    weekly review
    祸从口入祸从口出
  • 原文地址:https://www.cnblogs.com/husterzxh/p/8458714.html
Copyright © 2020-2023  润新知