1. 程式人生 > 其它 >每日一題——統計數字

每日一題——統計數字

技術標籤:每日一題python演算法

統計數字

本題來源:牛客網
題目連結: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!

能力有限,如有錯誤之處,敬請指正!