PTA 資料結構與演算法 7 38 尋找大富翁

2021-09-24 20:43:15 字數 1427 閱讀 8329

如有不對,不吝賜教

進入正題:

胡潤研究院的調查顯示,截至2023年底,中國個人資產超過1億元的高淨值人群達15萬人。假設給出n個人的個人資產值,請快速找出資產排前m位的大富翁。

輸入格式:

輸入首先給出兩個正整數n(≤10^​6)和m(≤10),其中n為總人數,m為需要找出的大富翁數;接下來一行給出n個人的個人資產值,以百萬元為單位,為不超過長整型範圍的整數。數字間以空格分隔。

輸出格式:

在一行內按非遞增順序輸出資產排前m位的大富翁的個人資產值。數字間以空格分隔,但結尾不得有多餘空格。

輸入樣例:

8 38 12 7 3 20 9 5 18

輸出樣例:

20 18 12

直接快排就行,但是這道題目有乙個測試點是全部逆序,所以排序演算法要用三數取中,(這應該是乙個習慣,但這裡懶就不想寫了)注意m>n的情況就行,下面給出**:

#include

#define swap

(a,b)

(a=a^b,b=a^b,a=a^b)

#define min

(a,b)

((a)

>

(b)?

(b):

(a))

void

quicksort

(long

*array,

int left,

int right)

;int

main

(void

)void

quicksort

(long

*array,

int left,

int right)

if(i!=left)

swap

(array[left]

,array[i]);

quicksort

(array,left,i-1)

;quicksort

(array,i+

1,right)

;return

;}

我的**中要注意的一點就是那個min巨集的寫法:

#define min

(a,b)

((a)

>

(b)?

(b):

(a))

這裡的a和b的括號問題是需要注意的,有可能會被漏掉。

測試結果:

其實更簡單的做法就是直接構建乙個大小為min(m,n)的最大堆就行了,這個做法可以自己去試試。

PTA 資料結構與演算法 堆疊

1.棧底元素是不能刪除的元素。1分 tf 2.對順序棧進行進棧 出棧操作不涉及元素的前 後移動問題。1分 tf 3.若用data 1 m 表示順序棧的儲存空間,則對棧的進棧 出棧操作最多只能進行m次。1分 tf 4.通過對堆疊s操作 push s,1 push s,2 pop s push s,3 ...

PTA 資料結構與演算法 佇列

1.在用陣列表示的迴圈佇列中,front值一定小於等於rear值。1分 tf 2.迴圈佇列執行出隊操作時會引起大量元素的移動。1分 tf 3.棧是插入和刪除只能在一端進行的線性表 佇列是插入在一端進行,刪除在另一端進行的線性表。1分 tf 4.n個元素進隊的順序和出隊的順序總是一致的。1分 tf 1...

PTA 資料結構與演算法 回溯

1.在4皇后問題中,x1,x2,x3,x4 對應4個皇后位置的列下標。在回溯剪枝過程中,狀態 1,4,2,會在 2,4,1,之前被檢查,並且它們對應的分支都沒有解。tf 2.西洋棋四皇后問題僅有 2 個不同的解。tf 1.給定收費公路重建問題的距離集d 首先可以確定的是 x1 0 和 x6 8。下列...