每日一题——统计数字

统计数字

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

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

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

题目描述

某次科研调查时得到了n个自然数,每个数均不超过1500000000((1.5*10^9))。已知不相同的数不超过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*10^9)

题目分析

这道题要考虑的有两个点,一是统计输入的所有自然数,二是输出的时候要按照数字大小升序输出。
考虑到这两点,我决定用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!

本博客同时发表在CSDN中,链接:https://blog.csdn.net/tangkcc/article/details/113695923

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

原文地址:https://www.cnblogs.com/tangkc/p/14377975.html