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