CCF入门P216练习6:世博会志愿者
2016-12-11 11:16
253 查看
题解
#include <cstdio> void sortsubarray(int data[], int begin, int end) { int i, j, k, temp; for(i = begin; i < end; i++) { for(j = i - 1; j >= begin; j--) if(data[j] > data[i]) break; if(j != i - 1) { temp = data[i]; for(k = i - 1; k > j; k--) { data[k + 1] = data[k]; } data[k + 1] = temp; } } } void sort2array(int data1[], int data2[], int n) { int i, j, k, temp1, temp2; for(i = 1; i < n; i++) { for(j = i - 1; j >= 0; j--) if(data1[j] > data1[i]) break; if(j != i - 1) { temp1 = data1[i]; temp2 = data2[i]; for(k = i - 1; k > j; k--) { data1[k + 1] = data1[k]; data2[k + 1] = data2[k]; } data1[k + 1] = temp1; data2[k + 1] = temp2; } } } void sortid(int data[], int id[], int n) { int i, j; for(i = 0; i < n; i++) { for(j = i; j < n; j++) if(data[j] != data[i]) break; j--; if(j == i) continue; sortsubarray(id, i, j); } } int main() { FILE *f = fopen("in.txt", "r"); int scoreline, n; fscanf(f, "%d%d", &n, 4000 &scoreline); int id[n + 5], score[n + 5]; int i; for(i = 0; i < n; i++) { fscanf(f, "%d%d", &id[i], &score[i]); } fclose(f); scoreline *= 1.5; scoreline--; sort2array(score, id, n); sortid(score, id, n); for(i = scoreline; i < n; i++) if(score[i] != score[scoreline]) break; scoreline = i - 1; printf("%d %d\n", score[scoreline], scoreline + 1); for(i = 0; i <= scoreline; i++) { printf("%d %d\n", id[i], score[i]); } return 0; }
注意
本题题解代码输入从同路径下in.txt文件输入。本题题解并非最佳解。
反思
对2个数组的同时排序、对子数组的排序容易出错。例如本题第5、6行for(i = begin; i < end; i++) { for(j = i - 1; j >= begin; j--) if(data[j] > data[i]) break;
很大几率会漏了子数组的起始位置和结束位置判断,导致id数组顺序错误。
知识点
插入排序见排序算法:插入排序(By KSkun)。相关文章推荐
- CCF入门P231练习6:ISBN号码
- CCF入门P204练习5:求所有x^2
- Raptor入门练习
- COJ 1019 JAVA入门练习
- oracle sql练习 菜鸟入门!
- 慕课网-Java入门第二季实战练习-答答租车系统
- webdrive入门初级脚本练习以及在centos下搭建selenuim+python环境
- Erlang入门:服务进程实例操作与练习1
- 蓝桥杯练习之入门训练
- 蓝桥杯练习系统BEGIN-1 入门训练 A+B问题
- 洛谷-陶陶摘苹果(升级版)-BOSS战-入门综合练习1
- Python入门练习0009:人民币金额打印
- /dev/fb0入门练习(linux FrameBuffer)
- MySQL入门基本知识和入门练习案例
- 割点,桥,双连通分量Tarjan ,入门练习
- 慕课网-Java入门第一季-7-4 编程练习
- ACM_ACM入门贴1_阶段练习
- 慕课网JAVA入门第二季综合练习答答租车系统
- java基础入门----TreeSet练习2
- 蓝桥杯练习系统习题解答-入门训练