zoukankan      html  css  js  c++  java
  • CCF之数字出现次数排序

    这道题是python程序设计课的作业题,感觉挺好的,一搜发现是CCF2015的题目,题目如下

    【问题描述】
    
    给定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
    
    
    【样例说明】
    
    n不超过1000,给出的数为2,000,000,000以内的非负整数。
    

    本来这题是要用正常解法O(n^2)加桶排序才能不超时的,但是由于使用了python,可以引用字典来解这个问题
    使用了python后,可以使用字典来统计各个数据出现的次数,然后对字典的键进行排序,生成一个有序列表,然后遍历这个有序列表,每遍历一次选出最大的值,然后删掉列表里对应的键,由于是从小到大遍历,所以对应的值相等则按键从小到大这个条件就自动满足了,这也是一个不错的解法,代码如下。

    n = int(input())
    data = input().split(" ",n)
    d = {}
    for i in data:
        if int(i) not in d:
            d[int(i)] = 1
        else:
            d[int(i)] += 1
    jian = sorted(d)
    # print(d)
    max = 0
    while jian:
        max = 0 
        for i in jian:
            if d[i] > max:
                max = d[i]
                icon = i
        print("{} {}".format(icon,max))
        jian.remove(icon)
        # print(jian)
        max = 0
    
  • 相关阅读:
    WinFrom 第三方控件 TeleRik控件
    部署项目可以将源码删掉
    XDocument简单入门
    通过HttpWebRequest在后台对WebService进行调用
    C#中HttpWebRequest的用法详解
    HttpWebRequest类
    系统之间通讯方式—SOAP(web service)
    Linux strace命令
    使用 Linux 的 strace 命令跟踪/调试程序的常用选项
    Linux umount的device is busy问题
  • 原文地址:https://www.cnblogs.com/yfc0818/p/11072629.html
Copyright © 2011-2022 走看看