天天看點

python實作 201503-2 數字排序滿分代碼(兩個方法)

試題編号: 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的非負整數。

滿分代碼(兩個方法)

from collections import Counter


# 方法一
# 讀取鍵盤輸入資料
n = int(input())
data = list(map(int, input().split()))


data = Counter(data)
data = sorted(data.items(), key=lambda x: x[1], reverse=True) # 根據第二位數字進行排序
result = []
length = len(data)
i = 0


while i < length:
    num = data[i][1]
    end = i                        # end記錄與data[i][1]相等的結束下标
    for j in range(i+1, length):   # 檢測後面的資料是否與data[i][1]相等
        if data[j][1] == data[i][1]:
            end = j
        else:
            break
    if end != i:                  
        temp = data[i:end+1]
        temp = sorted(temp, key=lambda x: x[0])
        for j in temp:
            result.append(j)
        i = end + 1
    else:
        result.append(data[i])
        i += 1
for i in result:
    print(i[0], i[1])
    


# 方法二
from collections import Counter

# 讀取鍵盤輸入資料
n = int(input())
data = list(map(int, input().split()))


data = Counter(data)
data = sorted(data.items(), key=lambda x: (x[1], -x[0]), reverse=True) # 根據第二位數字進行排序

for d in data:
    print(d[0], d[1])