1397.数据排序

时间限制: 1000 MS          内存限制: 65536 K
        
提交数: 1268 (0 users)          通过数: 116 (115 users)

问题描述
按一定顺序给n个学生数据“学号语文成绩 数学成绩 英语成绩 物理成绩 化学成绩 生物成绩”,现在让你按其中某一成绩从大到小排序(询问1按语文成绩排序,询问2按数学成绩排序,询问3按英语成绩排序,询问4按物理成绩排序,询问5按化学成绩排序,询问6按生物成绩排序),若成绩相同学号小的排在前面。输出排序后每个同学之前在原数据中的位置(如第一个读入数据的同学为1,最后一个读入数据的同学为N)。

输入格式
输入的第一行为一个整数N,代表有N个学生数据。(n<=1000)
接下来每一行一次输入学号、语文成绩、数学成绩、英语成绩、物理成绩、化学成绩、生物成绩,其中学号是一个十四位整数(该数值超过int类型表示的最大范围,请使用字符数组比较或者long long类型),成绩是一个范围[0,100]的整数。
再一行输入一个询问整数K∈{1,2,3,4,5,6},表示按第K种成绩排序,如题目所述。

输出格式
输出N行,代表排序后每个同学在原数据中所处的位置,即这个同学在原数据中是第几行。

样例输入
3
23020102203458 70 50 30 60 80 90
23020102203457 50 60 70 80 90 100
23020102203456 70 60 50 30 20 80
2

样例输出
3
2
1

来源

xmu

#include <stdio.h>
#include <string.h>struct Student
{char id[20];int chinese;int math;int english;int physics;int chemistry;int biology;int index;
};int cmp_chinese(struct Student a, struct Student b)
{return (a.chinese < b.chinese) || ((a.chinese == b.chinese) && (strcmp(a.id, b.id) > 0));
}int cmp_math(struct Student a, struct Student b)
{return (a.math < b.math) || ((a.math == b.math) && (strcmp(a.id, b.id) > 0));
}int cmp_english(struct Student a, struct Student b)
{return (a.english < b.english) || ((a.english == b.english) && (strcmp(a.id, b.id) > 0));
}int cmp_physics(struct Student a, struct Student b)
{return (a.physics < b.physics) || ((a.physics == b.physics) && (strcmp(a.id, b.id) > 0));
}int cmp_chemistry(struct Student a, struct Student b)
{return (a.chemistry < b.chemistry) || ((a.chemistry == b.chemistry) && (strcmp(a.id, b.id) > 0));
}int cmp_biology(struct Student a, struct Student b)
{return (a.biology < b.biology) || ((a.biology == b.biology) && (strcmp(a.id, b.id) > 0));
}int partition(struct Student *array, int low, int high, int (*cmp)(struct Student, struct Student))
{int mid = (low + high) / 2;array[0] = array[mid];array[mid] = array[low];while (low < high){while (low < high && (*cmp)(array[high], array[0]))--high;array[low] = array[high];while (low < high && !(*cmp)(array[low], array[0]))++low;array[high] = array[low];}array[low] = array[0];return low;
}void quicksort(struct Student *array, int low, int high, int (*cmp)(struct Student, struct Student))
{if (low >= high)return;int pivot = partition(array, low, high, cmp);quicksort(array, low, pivot-1, cmp);quicksort(array, pivot+1, high, cmp);
}int main()
{int n, k, i;struct Student stu[1005];int (*cmp)(struct Student, struct Student);scanf("%d", &n);for (i = 1; i <= n; ++i){scanf("%s %d %d %d %d %d %d", stu[i].id, &stu[i].chinese, &stu[i].math, &stu[i].english, &stu[i].physics,&stu[i].chemistry, &stu[i].biology);stu[i].index = i;}scanf("%d", &k);switch (k){case 1: cmp = cmp_chinese; break;case 2: cmp = cmp_math; break;case 3: cmp = cmp_english; break;case 4: cmp = cmp_physics; break;case 5: cmp = cmp_chemistry; break;case 6: cmp = cmp_biology; break;default: break;}quicksort(stu, 1, n, cmp);for (i = 1; i <= n; ++i)printf("%d\n", stu[i].index);return 0;
}

厦大C语言上机 1397 数据排序相关推荐

  1. 厦大C语言上机1381

    不重叠子串数 描述 小明又找到一道难一点的题:给出两个字符串t和s,求出t中能找出几个不重叠的s串.比如t="tobeornottobe",s="to",则t中 ...

  2. 厦大C语言上机 1510 小明的随机数

    小明的随机数 描述 小明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(),对于其中重复的数字,只保留一个,把其余相同的数去掉.然后,再把这 ...

  3. 厦大C语言上机 2020年期末上机考试 校验ISBN

    校验ISBN 描述 国际标准书号ISBN共17位,由13位数字和4位连字符("-")组成.最后1位数字表示校验位,校验规则为:对从左至右前12位数字,分别计算奇位数之和s1与偶位数 ...

  4. 厦大C语言上机 1489 变与不变

    1489.变与不变 时间限制: 1000 MS          内存限制: 65536 K          提交数: 494 (0 users)          通过数: 285 (277 us ...

  5. 厦大C语言上机 1413 模式匹配

    1413.模式匹配 时间限制: 1000 MS          内存限制: 65536 K          提交数: 765 (0 users)          通过数: 262 (251 us ...

  6. 厦大C语言上机 1367 几何级数的计算机验证法

    1367.几何级数的计算机验证法 时间限制: 1000 MS          内存限制: 65536 K          提交数: 653 (0 users)          通过数: 270 ...

  7. 厦大C语言上机 1488 判断素数

    1488.判断素数 时间限制: 1000 MS          内存限制: 65536 K          提交数: 1203 (0 users)          通过数: 276 (265 u ...

  8. 厦大C语言上机 2020年期末上机考试 整数编号

    整数编号 描述 有一个长度不超过100的整数数组a,每一个元素ai满足:0<ai≤100 现在对a的元素按照从小到大的顺序,从1开始进行编号,输出各个元素的编号值.要求不能改变数组a中元素的顺序 ...

  9. 厦大C语言上机 2020年期末上机考试 移车问题

    移车问题 描述 校门口有100个车位(编号为1,2,...,100)停满了共享单车,为了移走部分单车以方便通行,学校派了N个志愿者去移车,每个志愿者的任务单有两个数字L和R(1<=L<=R ...

最新文章

  1. 李飞飞高徒:斯坦福如何打造基于视觉的智能医院?
  2. redis 3.x windows 集群搭建
  3. Spring Boot开发Web应用
  4. JS闭包的简单理解。优缺点以及垃圾回收机制
  5. Android 系统(261)---SIM卡不识或者掉卡简单分析
  6. python | 实现多行向量(matrix)两两计算余弦距离、欧几里德距离
  7. 无锁atomicInteger
  8. 牛客寒假算法基础训练营5
  9. Character的static方法
  10. 首页增加了“阅读排行”
  11. 树莓派从零开始学习记录
  12. 论文的参考文献如何对齐。
  13. 前端工作中的一些解决问题的方法,可以参考一下
  14. 西湖论剑 2020 loader
  15. 南京南汽技工学校计算机专业是啥,计算机中心附近技术类学校
  16. Alpha版本冲刺(五)
  17. 人在江湖,以“核”为贵
  18. 软件测试 Web自动化测试 基础知识 HTML CSS JavaScript
  19. 【java】方法练习1-商品总价对应折扣
  20. js清空浏览器cokie缓存_js-cookie删除缓存

热门文章

  1. 一文带你了解场效应管
  2. 使用POI将数据库导出为excel表格
  3. 做知乎大神不如做个知乎,问答社区建站工具——WeCenter
  4. 关于老罗锤子ROM的一些感想
  5. 【Python入门】Turtle海龟库:利用海龟画笔绘制简单图形(5)
  6. idea 项目包无法引入问题
  7. Waring: /dev/centos/swap does not exist
  8. 2022开年,字节跳动签下了一位虚拟女生
  9. 今日起,白嫖阿里云服务器,1年!
  10. 架构师速成7.4-架构师为什么要带团队