PAT甲級1016解法

2022-05-25 07:48:07 字數 1101 閱讀 7969

這題的關鍵在於使用什麼資料結構去存輸入的資料,以及如何計算每次通話的費用。一開始我考慮了乙個非常複雜的方法,發現寫了一百多行**才開了個頭,覺得不太對勁,於是就上網搜尋了其他人是怎麼做的,看了之後豁然開朗。在讀入各個時段的話費**時,進行累加操作最後得出全天的話費方便後續計算。另外需要定義乙個儲存每條聯絡歷史的結構體。定義乙個vector儲存所有輸入的記錄。讀入以後需要對所有記錄進行排序,題目的要求是對各個使用者按字典順序排序,對同乙個的使用者的記錄按時間先後排序,所以sort方法的第三個引數就是專門為此設計的compare方法。最後輸出結果的時候需要對所有記錄亮亮進行配對看是否能配上。話費的計算則採用了乙個非常巧妙的方法,即都轉換為從該月的0號0點0分(理論上的)開始總計的話費,最後將結束通話時的總計話費和接通時的總計話費相減即得出該次通話的話費。

#include #include #include #include #include using namespace std;

struct record //聯絡歷史資訊

;bool compare(record a, record b)

int daytoll = 0; //一整天的費用

vectortolls; //儲存每個小時的話費資訊

double tollfromzero(record r);

int main()

int n;

cin >> n;

vectorrecords(n); //儲存所有聯絡歷史

for (int i = 0; i < n; i++)

sort(records.begin(), records.end(), compare);

map> result; //儲存每個顧客對應的聯絡歷史

for (int i = 1; i < records.size(); i++) }

for (auto it : result)

printf("total amount: $%.2lf\n", total);

} return 0;

}double tollfromzero(record r)

return sumtoll / 100; //單位從分轉換為元

}

PAT甲級1020解法

include include include using namespace std struct node vectorpostorder vectorinorder queuelevelorder void level node root,int n node construct int po...

PAT甲級1017解法

這題也出現了時間,我們根據上一題的經驗同樣把時分秒轉換為自零點零分零秒開始經過的秒數。這題也出現了視窗排隊,之前也有題目可以參考,而且這次每個視窗最多排乙個,更加簡單。另外,之前用過的sort排序這裡也有用處。本來我的想法是先填滿所有視窗,將沒排進視窗的統一放在乙個佇列中儲存,但這個方法比較複雜,而...

PAT甲級真題1069 數字黑洞 巧妙解法)

對於任何各位數字不完全相同的四位整數,我們將該數字的四個數字按非公升序排列,得到乙個數字,再按非降序排列,得到另乙個數字,將兩個數字相減就能得到乙個新的數字。不斷重複這個過程,我們就能得到數字6174 這是四位數字的黑洞。例如,給定數字 6767,過程如下 7766 6677 1089 9810 0...