每日一題——統計數字
統計數字
本題來源:牛客網
題目連結: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.5∗109)。已知不相同的數不超過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.5∗109)
題目分析
這道題要考慮的有兩個點,一是統計輸入的所有自然數,二是輸出的時候要按照數字大小升序輸出。
具體解決
分別解決這兩個點
統計輸入的所有自然數
這個很簡單,只要開一個字典,將數字作為鍵,次數作為值就好了
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!
能力有限,如有錯誤之處,敬請指正!