CCF201503-2 数字排序 (python语言)

试题编号:201503-2
试题名称:数字排序
时间限制:1.0s
内存限制:256.0MB
问题描述:

问题描述

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

 

问题链接:CCF201503-2 数字排序

问题分析

本题主要解决两个问题即可:

一是要将出现的数字记录下来,并且同时记录其出现的频次。(可以用一个二维数组,0位置记录数字,1位置记录频次)

二是要对所存储好的信息进行排序。首先需要依靠频次由大到小进行排序,再者再对频次相同的数字由小到大进行排序。

具体实现请看下面完整代码

满分代码

#读入需要读入的信息
n=int(input())
num=input().split()
count=[]
#处理读入的数字
for i in range(n):
    num[i]=int(num[i])
    #设置一个标记,判断这个数字是否在count中存在
    #存在为true,将对应的数字加1,不存在count中追加该数字
    judge=False
    for j in range(len(count)):
        if count[j][0]==num[i]:
            count[j][1]+=1
            judge=True
            break
    if judge==False:
        count+=[[num[i],1]]
#按照以每个数字出现的次数count[][1]来由大到小排列count
count.sort(key=lambda x:x[1],reverse=True)
#下面的操作就出现次数相同的数字都找出来,并且按照标记的大小由小到大排列
#由于比较困,所以下面写出来的操作比较冗长,读者可自行改写,只要实现功能即可。
judge_num=count[0][1]
s=[count[0]]
begin=0
end=0
for i in range(1,len(count)):
    end=i
    if count[i][1]==judge_num:
        s+=[count[i]]
    else:
        s.sort(key=lambda x:x[0])
        for j in range(begin,end):
            count[j]=s[j-begin]
        begin=i
        judge_num=count[i][1]
        s=[count[i]]
s.sort(key=lambda x:x[0])
for j in range(begin,end+1):
    count[j]=s[j-begin]
#将结果输出来
for i in range(len(count)):
    print(count[i][0],count[i][1])

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值