ZJU 09 複試上機 第四題

2021-05-21 23:26:25 字數 1479 閱讀 7759

第四題:尋找大富翁;輸入n(

0),m(0,

n為小鎮上的人數,

m為需要找出的大富翁數。輸入:

n, m

接下來一行輸入小鎮

n個人的財富值,輸出:前

m個大富翁的財產數,n為

0時結束

這道題 看到時有點蠻驚訝的,或許是記憶版改變了題目。我理解錯了,第四道不至於還送分 1、2、4加起來20分鐘可以搞定 未免有點,何況我的程式設計水品還是個超級菜鳥

#include

#include

using namespace std;

int num[100000];

int cmp(int x,int y)

int main()

{int n,m;

while(cin>>n>>m&&n)

{int i;

for(i=0;i>num[i];

sort(num,num+n,cmp);

for(i=0;i

萬一到時不讓用sort 這裡還是留乙個快速排序的模板,要熟悉至少乙個自定義版本,已被不時之需

語法:quicksort(

intl,

intr,

intb);

引數: l:

排序上界,開始時l=0r:

排序下界,開始時r=陣列元素個數b:

被排序的元素

返回值:

null

注意:

輸出公升序序列

源程式:

void

quicksort(

intl,

intr,

intb)

{int

i,j,x;

if(l>=r)

return

;i=l;

j=r;

x=b[i];

while

(i!=j)

{while

(b[j]>x&&j>i) j--;

if(i

while

(b[i]i)i++;

if(i

暈啦,果然不出所料,題目不可能這麼直白,10*100000=1000000;這是使用選擇排序的代價,以後要有這個概念,這個能一百萬的運算次數能夠提交   而直接使用sort的代價是

log(100000)*100000是前者的好幾倍,上機時是不能ac的

更節約時間和記憶體的方法是邊輸入邊篩選的演算法,先用前十個數字輸入並排序,然後後續每乙個輸入都先和這10個元素的最小值進行比較,如果小的話不用操作,大的話就替換 並重新排序,一趟氣泡排序就夠,要掌握技巧(當然效能最高的還是建乙個堆,堆篩選重新恢復有序的代價小很多,實現起來麻煩一點,考試的時候還是按照資料的規模自己把握),

這裡了解vector 的partial_sort好辦很多,這裡給出模板

partial_sort(vector.begin(),vector.begin()+require,vector.end(),cmp)

東華複試上機備考踩坑記 15年第四題

我的 刪除陣列中的重複元素 演算法概述 遍歷陣列,若陣列當前元素和後一元相同,則保留後一元素,將當前元素刪除,否則什麼也不做 此演算法時間複雜度為o n 2 空間複雜度為o 1 include define max size 100 typedef struct slist slist void f...

第四章上機

上機3 not in 關鍵字 使用not in 關鍵字的子查詢來查詢為參加 的課程最近一次考試的再讀學生名單 select studentname from student as stu,result as res where stu.studentno res.studentno and exam...

第四章上機

演算法實現 include include include include include using namespace std 函式宣告 int input 輸入性別 int input race 輸入種族 int input occupation int 輸入職業 void output at...