九度online judge 開門人和關門人

2021-06-27 02:58:46 字數 1659 閱讀 9865

我的**:已ac

#include

#include

#include

usingnamespace

std;

class employee

void print()

bool

operator

> (

const

employee

& a)

else

if(this->minute1

minute1)

return

false;

}else

if(this->hour1

hour1)

return

false;

return

true;

}bool

operator

< (

const

employee

& a)

else

if(this->minute2>a.minute2)

return

false;

}else

if(this->hour2>a.hour2)

return

false;

return

true;}};

employee employee[100];

int main()

int j=0;

employee * first=employee;

employee * last=employee;

for(;j//比較這一天內m條記錄中的最早到達者和最晚離開者,兩個函式分別返回類物件指標

if(*first>employee[j])

first=&employee[j];

if(*lastlast=&employee[j];

}first->print();

cout

<<" ";

last->print();

cout

<}return0;}

在本題中我碰到了兩個問題:

1.string和char* 之間的聯絡  

注意到類tree的資料成員用的是 char*而不是string,具體他們之間的轉化會出現什麼問題下次會增加。

2.指標與記憶體空間問題    

首先:

分配陣列空間語句放在while迴圈外面時,執行結果發現每次新增加一天記錄後之前的記錄中的證件號碼均被修改為新增加記錄的值,說明多個類物件的s指標指向了同一塊記憶體空間,即均指向了tstr陣列空間,所以應在每次新建類物件之前,動態為其分配一塊空間,將分配陣列空間語句放到迴圈內。

另外:

看下面的while迴圈,迴圈內有個分配記憶體的語句。

while(1)

那麼它是每次都分配記憶體,還是只分配一次記憶體呢?

經過驗證發現,每當程式執行到右大括號時,command指向的記憶體都被釋放掉了,然後重新執行到char command[100]時,系統又重新給程式分配了記憶體。但是需要注意的是,在程式每次執行過程中,程式使用的記憶體的其實位址都是一樣的。也就是說每次分配了相同位置的記憶體。

所以不能這樣在while內分配記憶體,改用new動態分配堆空間,必須手動釋放該空間才可以,而不是遇到大括號就釋放,只要不手動釋放,下次分配的空間位址肯定會不同。

九度OnlineJudge 搬水果(1107)

題目描述 在乙個果園裡,小明已經將所有的水果打了下來,並按水果的不同種類分成了若干堆,小明決定把所有的水果合成一堆。每一次合併,小明可以把兩堆水果合併到一起,消耗的體力等於兩堆水果的重量之和。當然經過 n 1 次合併之後,就變成一堆了。小明在合併水果時總共消耗的體力等於每次合併所耗體力之和。假定每個...

九度OnlineJudge題目1009 二叉搜尋樹

題目描述 判斷兩序列是否為同一二叉搜尋樹序列 輸入 開始乙個數n,1 n 20 表示有n個需要判斷,n 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含 0 9 的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。接下去的n行有n個序列,每個序列格式跟第乙個序列一樣,請判斷這...

九度OnlineJudge之1014 排名

題目描述 今天的上機考試雖然有實時的ranklist,但上面的排名只是根據完成的題數排序,沒有考慮每題的分值,所以並不是最後的排名。給定錄取分數線,請你寫程式找出最後通過分數線的考生,並將他們的成績按降序列印。輸入 測試輸入包含若干場考試的資訊。每場考試資訊的第1行給出考生人數n 0 n 1000 ...