学校选拔篮球队员,每间宿舍最多有 4 个人。现给出宿舍列表,请找出每个宿舍最高的同学。定义一个学生类 Student,有身高 height,体重 weight 等。
输入格式:
首先输入一个整型数 n (1≤n≤106),表示有 n 位同学。
紧跟着 n 行输入,每一行格式为:宿舍号 name height weight。
宿舍号的区间为 [0, 999999], name 由字母组成,长度小于 16,height,weight 为正整数。
输出格式:
按宿舍号从小到大排序,输出每间宿舍身高最高的同学信息。题目保证每间宿舍只有一位身高最高的同学。
注意宿舍号不足 6 位的,要按 6 位补齐前导 0。
输入样例:
7
000000 Tom 175 120
000001 Jack 180 130
000001 Hale 160 140
000000 Marry 160 120
000000 Jerry 165 110
000003 ETAF 183 145
000001 Mickey 170 115
输出样例:
000000 Tom 175 120
000001 Jack 180 130
000003 ETAF 183 145
000000 Tom 175 120 000001 Jack 180 130 000003 ETAF 183 145
我个人所写的一段代码:
个人理解所写,欢迎大家深入交流讨论!!!
#includestruct Student{ int num=-1; //判断每一个宿舍中是否有人的标志 char name[20]; int height; int weight; }; int main(){ int sum=0, m, n; scanf("%d", &n); Student student[100], huancun;//我这里只开了100个空间的宿舍,如果测试数据量大可以增加 while(n--){ scanf("%d", &m);//输入宿舍号 if(student[m].num==-1){//如果宿舍之前没有存储人 student[m].num=m;//将宿舍号作为数组编号对其内部进行存放数据 scanf("%s%d%d", &student[m].name, &student[m].height, &student[m].weight); } else{//宿舍之前存储有人 huancun.num = m; scanf("%s%d%d", &huancun.name, &huancun.height, &huancun.weight);//将输入数据全部存到缓存数据中 if(huancun.height>student[m].height){//判断新进来的和原来的谁更高 student[m]=huancun;//留下身高更高的 } } } for(int i=0;i<100;i++){//按数组顺序,恰好是宿舍编号从小到大输出 if(student[i].num!=-1){//如果宿舍有入住,就对其输出 printf("%06d %s %d %dn", student[i].num, student[i].name, student[i].height, student[i].weight); } } return 0; }
内蒙古工业大学-----兰宇



