HDOJ 1862:EXCEL排序 使用一下函数指针数组
2012-01-07 12:58
288 查看
浙大的这道考研上机真题题以EXCEL排序作为背景,需要三个不同的比较器作为sort函数的第三个参数。如果用多重判断来调用不同的比较器的话,代码会冗余。于是尝试理论一下函数指针数组。
这道题的URL:http://acm.hdu.edu.cn/showproblem.php?pid=1862
我的AC代码.
这道题的URL:http://acm.hdu.edu.cn/showproblem.php?pid=1862
我的AC代码.
#include<iostream> #include<stdio.h> #include<algorithm> #include<string.h> using namespace std; const int Max = 100000 + 10; struct Record { char sno[7]; char name[9]; int grade; }; Record s[Max]; bool com0(const Record &a, const Record &b) { if(strcmp(a.sno, b.sno) < 0) return true; else return false; } bool com1(const Record &a, const Record &b) { if(strcmp(a.name, b.name) < 0) return true; else if(!strcmp(a.name, b.name)) return com0(a, b); else return false; } bool com2(const Record &a, const Record &b) { if( a.grade < b.grade ) return true; else if(a.grade == b.grade) return com0(a, b); else return false; } int main() { int n, m, cases = 1; bool (*f[3])(const Record &, const Record &); f[0] = com0, f[1] = com1, f[2] = com2; while(scanf("%d %d", &n, &m) && n) { for(int i=0; i<n; i++) { scanf("%s %s %d", &s[i].sno, &s[i].name, &s[i].grade); } sort(s, s + n, *f[m-1]); printf("Case %d:\n", cases++); for(int i=0; i<n; i++) printf("%s %s %d\n", s[i].sno, s[i].name, s[i].grade); } system("pause"); return 0; }
相关文章推荐
- hdoj 1862 EXCEL排序 【结构体+sort】
- 一个包含指针数组的排序和使用函数指针来控制排序方式
- HDOJ 1862 EXCEL排序(比较器)
- hdoj EXCEL排序 1862 (结构体)简单题
- HDOJ1862 ( EXCEL排序 ) 【排序函数】
- 杭电OJ(HDOJ)1862题:EXCEL排序(结构体sort)
- HDOJ 1862 EXCEL排序 (结构体排序的构造)
- hdoj 1862 EXCEL排序
- 使用函数指针,完成一个sort()函数,能对任何类型的数组元素进行排序: 回调函数 以及 memcpy ()原型实现
- HDOJ1862 EXCEL排序(比较器)
- hdoj1862 EXCEL排序(sort、结构体)
- 函数指针数组的使用(简单)
- 使用关键字对数组进行模糊查找;对一维字符串数组进行排序
- 函数指针数组的应用,但在类内作为成员使用,需要特殊处理,指针类型要匹配
- 函数指针数组的使用
- 在不使用数组函数的情况下实现数组排序
- 经典算法面试题系列(三)——不使用系统函数排序数组
- 要使用 MFC 使 Excel 和使用数组填充区域
- EXCEL中使用VB按列排序
- 杭电1862EXCEL排序