每日一题——统计数字

统计数字

本题来源:牛客网
题目链接:https://ac.nowcoder.com/acm/problem/16643
难度星级:2星
主要考察:排序、字典

这是一道简单(相对于部分语言来说)的排序的题目,先来看题

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

某次科研调查时得到了n个自然数,每个数均不超过1500000000( 1.5 ∗ 1 0 9 1.5*10^9 1.5109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

输入描述:

第1行是整数n,表示自然数的个数。
第2~n+1行每行一个自然数。

输出描述:

输出m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。

示例1

输入
8
2
4
2
4
5
100
2
100
输出
2 3
4 2
5 1
100 2

备注:

40%的数据满足:1 ≤ n ≤ 1000
80%的数据满足:1 ≤ n ≤ 50000
100%的数据满足:1 ≤ n ≤ 200000,每个数均不超过1500000000( 1.5 ∗ 1 0 9 1.5*10^9 1.5109

题目分析

这道题要考虑的有两个点,一是统计输入的所有自然数,二是输出的时候要按照数字大小升序输出。
考虑到这两点,我决定用python来AC这道题。

具体解决

分别解决这两个点

统计输入的所有自然数

这个很简单,只要开一个字典,将数字作为键,次数作为值就好了

number = {}
for i in range(n):
    x = int(input())
    if x in number.keys():
        number[x] += 1
    else:
        number[x] = 1
输出的时候要按照数字大小升序输出

我这里用的方法是把所有的键存入一个列表中,再将列表排序,由于python列表有排序用的sort()方法,所以直接调用就好了,如果是其他语言的话,就这给的时间限制,我估计无论用什么排序应该也都不会超时吧。当然肯定也不止这种方法,随意发挥就好。排序完后依次输出就好了。

key = list(number.keys())
key.sort()
for i in key:
    print("{} {}".format(i, number[i]))

实现代码(python3.9)

n = int(input())
number = {}
for i in range(n):
    x = int(input())
    if x in number.keys():
        number[x] += 1
    else:
        number[x] = 1
key = list(number.keys())
key.sort()
for i in key:
    print("{} {}".format(i, number[i]))

提交结果

在这里插入图片描述

over!

能力有限,如有错误之处,敬请指正!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T&King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值