031502624 賴志平 博客連接
031502627 王國華html
laizhiping/department_studentgit
數據
數據生成原理:這裏數據生成採用了隨機數生成數據,時間:在客觀可行的狀況下來生成合適的時間點,再按照正確的格式輸出到文件中。爲了方便計算只考慮了整點的狀況。tags的生成也是隨機首先要有所有的tags,大概有20個左右。首先要隨機生成tags的數量,在隨機挑選該數量的tags。接着學生報的部門數、部門的名額數量也要依照題目要求隨機生成。github
struct Department{ string department_no; int member_limit; string event_schedules[20]; string tags[20]; int accept_members[300]; int accept_members_time[300]; int member_num = 0; }department[N];//部門結構體 struct Student{ string student_no; string applications_department[5]; string free_time[20]; string tags[20]; int join_departments = 0; }student[M];//學生結構體 /*輸出部分存放數據*/ struct Admitted { string member[15]; string department_no; }admitted[20]; string unlucky_student[300]; string unlucky_department[20];
首先,咱們將匹配分紅兩輪,每次經過不一樣的標準來匹配,每一次匹配都會更加細化和合理。
第一次匹配:按照支援的匹配 第一次匹配依照的是學生的志願。由於部門和學生的匹配中最重要的確定是志願。學生報了志願部門才能將學生錄取。因此咱們採用志願爲條件進行最初的篩選。
遍歷所有學生,根據每一個學生填報的部門志願,即 applications_department
,而且在每個部門的accept_members
數組裏填入志願加入部門的學生的結構體數組編號。完成按照志願的匹配。
第二次匹配:按照時間的匹配 第二次匹配是依照學生空閒時間和部門活動時間來進行匹配。依次掃描預錄取的學生,經過分析時間的字符串計算出學生的空閒時間和部門活動時間的重複時間,並記錄在數組中。以後進行排序,以此決定錄取的學生優先級。選擇最靠前的學生錄取。決定錄取時將部門序號填入學生結構體中,將學生序號填入部門結構體中,方便輸出。算法
代碼規範
部分代碼規範:
代碼佐證:
json
匹配結果:點擊
數據按照要求的格式生成,其中學生匹配先按照志願分組,再進行時間知足毒的排序,用排序結果來決定學生是否被錄取。空閒時間和部門活動時間徹底不重合的學生將會被淘汰。故學生加入部門必定是合理的。可是仍是有一些不足之處。好比說減去學生空閒時間中已加入部門佔用的時間,以及學生所加的部門數。還有tags
,這個興趣標籤能夠做爲學生錄取優先級的參考,可是因爲時間關係,咱們在前面的部分佔用太多時間,並且這些功能過於複雜,最後仍是放棄了,只採起了按照志願和時間爲條件來匹配。原先咱們考慮過一些特殊狀況,好比說學生沒有進入部門的話給學生推薦一些部門,將學生加入符合興趣標籤的部門。可是這樣很明顯是不符合實際的要求的,若是這麼作的話這位同窗可能會罵娘。數組
本次結對仍是學到了不少東西的。然而本身作的並很差。因爲本身一直搞不懂 json ,因此這部分大多都是對方作的。我主要作的是配對的算法部分。實際上不是很難。可是因爲本身不多練習,很難上手,寫出來的代碼總會有各類各樣的錯誤。我認爲這是本身應當增強的。
在結對中,你們一塊兒完成項目,因此一點都不能懈怠。由於本身而拖累到兩我的時會很內疚。因此我會盡可能的聯繫,讓本身儘快的熟練打代碼,再也不由於本身的一些低級問題拖累到整個項目的進度。
兩我的各自寫代碼必定要提早交流好,咱們由於一些錯誤走了不少彎路,屢次修改代碼。經過此次做業感覺到兩我的必定要溝通好,明確各自的任務,及時溝通進度。能夠大大提升效率,減小走彎路的次數。app