MOOC清华《程序设计基础》第4章第2题:最高分与最低分(用复合型折半插入排序法做)
来源:互联网 发布:天天秒淘宝秒杀助手 编辑:程序博客网 时间:2024/05/17 03:31
题目描述
清华附小期末考试结束后,分别由数学、语文、英语按照学号顺序输入30名同学的成绩,班主任想知道三门课总分的最高分和最低分,以及取得总分最高分和最低分的两位同学的编号。(输入数据保证没有同分情况,编号由1到30)
第一行输入编号为1-30的30位同学的数学成绩,分数之间用空格隔开;第二行输入语文成绩,第三行输入英语成绩
输出四个数,分别是总分最高分,总分最低分,取得最高分同学的编号,取得最低分同学的编号
100 99 99 99 99 ... 98 97 90 60 100 98 97 96 95 ... 97 96 98 60 100 90 90 90 90 ... 96 95 94 60样例输出
300 180 1 30
#include <iostream>using namespace std;#define N 30int main(){int Math[N] = {0}, Chinese[N] = {0}, English[N] = {0}, Total[N] = {0}, Number[N] = {0};for(int i = 0; i < N; i++)cin >> Math[i]; //输入数学成绩 for(int i = 0; i < N; i++)cin >> Chinese[i]; //输入语文成绩 for(int i = 0; i < N; i++)cin >> English[i]; //输入英语成绩 for(int i = 0; i < N; i++)Total[i] = Math[i] + Chinese[i] + English[i]; //计算总分 for(int i = 0; i < N; i++)Number[i] = i + 1; //生成序号 void BinaryInsectionSort_Complex(int a[], int b[], int n);BinaryInsectionSort_Complex(Total, Number, N);cout << Total[N - 1] << ' ' << Total[0] << ' ' << Number[N - 1] << ' ' << Number[0];return 0;}void BinaryInsectionSort_Complex(int a[], int b[], int n) { for(int i = 1; i < n; i++) { int target = a[i], attach = b[i]; int low = 0, high = i - 1, id = -1; while (low <= high) { int middle = (low + high) / 2; if(a[middle] >= target) high = middle - 1; else low = middle + 1; } id = high + 1; if(id != -1) { for(int j = i; j > id; j--) {a[j] = a[j - 1];b[j] = b[j - 1];} a[id] = target;b[id] = attach; } } }
在上述代码中,最主要的技巧是:一,宏定义与数组下标的灵活关系;二,复合型折半插入排序函数中,按 a[i] 从小到大排序,同时 b[i] 也作为 a[i] 的相关数组参与排序,这样就保证了两个数组的对应关系没有被破坏,这与Windows磁盘系统中文件按不同指标排序是同样的思想。
阅读全文
0 0
- MOOC清华《程序设计基础》第4章第2题:最高分与最低分(用复合型折半插入排序法做)
- MOOC清华《程序设计基础》第4章第2题:最高分与最低分(用线性查找法做)
- MOOC清华《程序设计基础》第4章:折半插入排序(测试代码版)
- MOOC清华《程序设计基础》第4章:折半插入排序(函数写法)
- MOOC清华《程序设计基础》期末考试第3题:统计高考录取人数与录取最低分
- MOOC清华《程序设计基础》第4章第1题:找出ab间的素数(用枚举法做)
- MOOC清华《程序设计基础》第4章:整理扑克牌(插入排序)
- MOOC清华《程序设计基础》第4章:整理扑克牌(插入排序精简版)
- MOOC清华《程序设计基础》第4章:插入排序(函数写法)
- MOOC清华《程序设计基础》第5章第4题:用递归算法实现选择排序
- MOOC清华《程序设计基础》第4章:查找扑克牌(折半查找)
- MOOC清华《程序设计基础》第5章:求n的阶乘(用枚举法做)
- MOOC清华《程序设计基础》第5章:求n的阶乘(用递归法做)
- MOOC清华《程序设计基础》第4章:整理扑克牌(选择排序)
- MOOC清华《程序设计基础》第4章:选择排序(函数写法)
- MOOC清华《程序设计基础》第5章:归并排序
- MOOC清华《程序设计基础》第2章第4题:解方程2
- MOOC清华《程序设计基础》第6章第3题:最大乘积问题(递归法)
- 某知名公司的两道sql面试题
- undefined function curl_init()
- MYSQL联合多表更新和删除
- 简谈servlet
- 【MySQL】创建普通用户,分配权限,取消权限
- MOOC清华《程序设计基础》第4章第2题:最高分与最低分(用复合型折半插入排序法做)
- 让手机软键盘出现“搜索”按钮
- windows环境 redis集群
- 详解Paint的setXfermode(Xfermode xfermode)(好文章在此记录)
- web响应式设计
- 使用Path绘制图形,和绘制一条动画曲线(跟踪动画)
- Android 7.0下载安装APK
- java异常类型知识点
- BZOJ 3295 动态逆序对 CDQ分治