5-49 打印学生选课清单 (25分)
2016-08-31 11:40
423 查看
5-49 打印学生选课清单 (25分)
假设全校有最多40000名学生和最多2500门课程。现给出每门课的选课学生名单,要求输出每个前来查询的学生的选课清单。输入格式:
输入的第一行是两个正整数:N(≤40000),为前来查询课表的学生总数;K(≤2500),为总课程数。此后顺序给出课程1到K的选课学生名单。格式为:对每一门课,首先在一行中输出课程编号(简单起见,课程从1到K编号)和选课学生总数(之间用空格分隔),之后在第二行给出学生名单,相邻两个学生名字用1个空格分隔。学生姓名由3个大写英文字母+1位数字组成。选课信息之后,在一行内给出了N个前来查询课表的学生的名字,相邻两个学生名字用1个空格分隔。
输出格式:
对每位前来查询课表的学生,首先输出其名字,随后在同一行中输出一个正整数C,代表该生所选的课程门数,随后按递增顺序输出C个课程的编号。相邻数据用1个空格分隔,注意行末不能输出多余空格。
输入样例:
10 5 1 4 ANN0 BOB5 JAY9 LOR6 2 7 ANN0 BOB5 FRA8 JAY9 JOE4 KAT3 LOR6 3 1 BOB5 4 7 BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1 5 9 AMY7 ANN0 BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1 ZOE1 ANN0 BOB5 JOE4 JAY9 FRA8 DON2 AMY7 KAT3 LOR6
输出样例:
ZOE1 2 4 5 ANN0 3 1 2 5 BOB5 5 1 2 3 4 5 JOE4 1 2 JAY9 4 1 2 4 5 FRA8 3 2 4 5 DON2 2 4 5 AMY7 1 5 KAT3 3 2 4 5 LOR6 4 1 2 4 5
思路
用学生的名字为Key建立一个可以快速访问、读写的结构。(这里我用了4维数组),然后对于每一门课程,旗下的学生如果此前无信息,就New,有信息就添加该门选课到名字底下。如果前面的结构建立成功了,相信后面的查询输出自然不在话下。
点击访问 PTA-测验
#include <stdio.h> #include<stdlib.h> /* 这个绝对够猥琐!!!26*26*26*10,,还算比较小的呢! */ typedef struct node *Node; struct node { int Course; Node Next; }; Node Insert(Node,int); void Print(Node,int); int k;//<=2500 int main() { Node List[26][26][26][10]= {}; for(int i=0; i<26; i++) for(int j=0; j<26; j++) for(int u=0; u<26; u++) for(int k=0; k<10; k++) List[i][j][u][k]=NULL; int n;//<=40000 scanf("%d%d",&n,&k); char name[5]; for(int i=0; i<k; i++) { int numbers;//每门课的学生人数 int course; scanf("%d%d",&course,&numbers); for(int j=0; j<numbers; j++) { getchar(); scanf("%s",name); List[name[0]-'A'][name[1]-'A'][name[2]-'A'][name[3]-'0']=Insert( List[name[0]-'A'][name[1]-'A'][name[2]-'A'][name[3]-'0'],course); } } for(int i=0; i<n; i++) { scanf("%s",name); printf("%s",name); Print(List[name[0]-'A'][name[1]-'A'][name[2]-'A'][name[3]-'0'],0); printf("\n"); } return 0; } void Print(Node h,int n) { if(h) { Print(h->Next,n+1); printf(" %d",h->Course); } else printf(" %d",n); } Node Insert(Node h,int K) { if(!h||h->Course<K) { Node temp=(Node)malloc(sizeof(struct node)); temp->Course=K; temp->Next=h; return temp; } else if(h->Course!=K)h->Next=Insert(h->Next,K); return h; }
相关文章推荐
- 5-2 打印学生选课清单 (25分)
- 5-6 打印学生选课清单 (25分)
- PTA 5-18 打印学生选课清单 (25分)【】
- PAT DS 8-04 打印学生选课清单
- 打印学生选课清单
- 打印学生选课清单
- 5-47 打印选课学生名单 (25分)
- PTA2-6 打印学生选课清单(15 分)
- 8-04. 打印学生选课清单
- pta 习题集5-18 打印学生选课清单
- 数据结构课设 打印学生选课清单 (Hash)
- pta 习题集5-18 打印学生选课清单
- PTA-打印选课学生名单
- 7-5 打印选课学生名单(25 point(s)) 【排序】
- 打印选课学生名单
- 7-47 打印选课学生名单(25 分)
- 数据结构课设 打印选课学生名单 。。
- 打印选课学生名单(开定长数组省空间)
- MySQL实现学生选课系统的成绩统计
- Java-Set测试-学生选课