谁有网站推荐一个,微信小程序电脑端打开,长治个人做网站,建站网站教程视频题目描述 #xff1a; 给定一组部门信息存在departsMents #xff0c; departsMents[i] 表示 cityName 部门所在城市#xff0c;departName 部门名称#xff0c; personNum部门人数
先从每个城市选取人数最多的5个部门作为分析对象#xff0c;当人数相等时优先选取depart…题目描述 给定一组部门信息存在departsMents departsMents[i] 表示 cityName 部门所在城市departName 部门名称 personNum部门人数
先从每个城市选取人数最多的5个部门作为分析对象当人数相等时优先选取departName 字典序最小的 不足5个按实际选然后对选取的结果按照 cityName departName 逐行输出 首先按cityName 字典升序同一个·城市按departName字典升序输出
解题思路 定义结构体 部门结构体 部门名字 部门人数
城市结构包含 城市名字 部门结构体 部门数目 step1: 创建临时结构体数组存放选出的城市和部门信息 step2: 对上面结构体 对部门信息按人数 部门名称排 step3: 申请返回空间 放进去选好的输出形式数据 step4: 对输出结果先排城市名 再排部门名
#define MAX_LEN 10
#define MAX_NUM 100
typedef struct {char departName[MAX_LEN];int personNum;
}DepartInfo;typedef struct {char cityName[MAX_LEN];DepartInfo departInfo[MAX_NUM];int departNum;
}CityInfo;typedef struct {char* departName;char* cityName;int personNum;
}DepartMnent;typedef struct {char* departName;char* cityName;
}DepartOut;// 对部门人数和部门名称排序
int cmp1(const void* a, const void* b)
{DepartOut* pa (DepartOut*)a;DepartOut* pb (DepartOut*)b;if (strcmp(pa-cityName, pb-cityName) 0) {return strcmp(pa-departName, pb-departName);}return strcmp(pa-cityName, pb-cityName);
}int cmp2(const void* a, const void* b)
{DepartInfo* pa (DepartInfo*)a;DepartInfo* pb (DepartInfo*)b;if (pa-personNum pb-personNum) {return strcmp(pa-departName, pb-departName);}return pb-personNum - pa-personNum;
}DepartOut* filter(DepartMnent* departsMents, size_t departsMentsSize, DepartOut* outPut)
{CityInfo info2[MAX_NUM];for (int i 0; i departsMentsSize; i) {info2[i].departNum 0;for (int j 0; j MAX_NUM; j) {info2[i].departInfo[j].personNum 0;}}int cityNum 0;int flag; // 城市标记for (int i 0; i departsMentsSize; i) {flag 0;// 遍历城市for (int j 0; j cityNum; j) {if (strcmp(departsMents[i].cityName, info2[j].cityName) 0) {// 1. 添加已经存在城市的部门信息strcpy_s(info2[j].departInfo[info2[j].departNum].departName, MAX_LEN, departsMents[i].departName);info2[j].departInfo[info2[j].departNum].personNum departsMents[i].personNum;info2[j].departNum 1;flag 1;break;}}// 2. 添加新城市 if (flag 0) {strcpy_s(info2[cityNum].cityName, MAX_LEN, departsMents[i].cityName);// 添加部门strcpy_s(info2[cityNum].departInfo[info2[cityNum].departNum].departName, MAX_LEN, departsMents[i].departName);// 部门人数 info2[cityNum].departInfo[info2[cityNum].departNum].personNum 1;// 部门数info2[cityNum].departNum 1;cityNum;}}// 对部门信息按人数排 部门名称排for (int i 0; i cityNum; i) {qsort(info2[i].departInfo, info2[i].departNum, sizeof(DepartInfo), cmp1);if (info2[i].departNum 5) {info2[i].departNum 5;}}// 将排好序的填进申请空间// 返回的形式是城市 和 部门 外层申请大的 内层分别申请城市名字和 部门名字DepartOut* departOut (DepartOut*)malloc(sizeof(DepartOut) * cityNum);for (int i 0; i cityNum; i) {// 每个城市对应几个部门 再申请部门的空间for (int j 0; j info2[i].departNum; j) {departOut[i].cityName (char*)malloc(sizeof(char) * MAX_LEN);departOut[i].departName (char*)malloc(sizeof(char) * MAX_LEN);strcpy_s(departOut[i].cityName, MAX_LEN, info2[i].cityName);strcpy_s(departOut[i].departName, MAX_LEN, info2[i].departInfo[j].departName);}}// 第二个排序 先排城市名 再排部门qsort(departOut, cityNum, sizeof(DepartOut), cmp2);return departOut;
}