九度--特殊排序,Excel排序

题目1185:特殊排序时间限制:1 秒内存限制:32 兆特殊判题:否提交:15759解决:3624题目描述:输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序。输入:输入第一行包括1个整数N,1<=N<=1000,代表输入数据的个数。接下来的一行有N个整数。输出:可能有多组测试数据,对于每组数据,第一行输出一个整数,代表N个整数中的最大值,并将此值从数组中去除,将剩下的数进行排序。第二行将排序的结果输出。样例输入:41 3 4 2样例输出:41 2 3提示:如果数组中只有一个数,当第一行将其输出后,第二行请输出"-1"。九度中的特殊排序题目意思没讲明白,注意:只要选中一个最大的就挑出来,然后输出其余的已经排好的序列。代码如下:#define _CRT_SECURE_NO_DEPRECATE #include#include#include#includeusing namespace std;bool cmp(int a, int b) {return a < b;}int main() {int n;int a[1001];while (scanf("%d", &n) != EOF) {for (int i = 0; i < n; i++) {scanf("%d", &a[i]);}sort(a, a + n, cmp); //升序排列,cmpif (n == 1) { printf("%d\n", a[0]);printf("-1");}else {printf("%d\n", a[n - 1]); //排序后,序列最后面的数是最大的,挑出来printf("%d", a[0]);for (int i = 1; i < n - 1; i++) {printf(" %d", a[i]); //后面输出不允许有空格}}printf("\n");}system("pause");return 0;}Excel排序题目1023:EXCEL排序时间限制:1 秒内存限制:32 兆特殊判题:否提交:14811解决:3357题目描述: Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。 对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3 时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。输入: 测试输入包含若干测试用例。每个测试用例的第1行包含两个整数 N (N<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号。以下有N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。输出: 对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3 时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。样例输入:3 1000007 James 85000010 Amy 90000001 Zoe 604 2000007 James 85000010 Amy 90000001 Zoe 60000002 James 984 3000007 James 85000010 Amy 90000001 Zoe 60000002 James 900 0样例输出:Case 1:000001 Zoe 60000007 James 85000010 Amy 90Case 2:000010 Amy 90000002 James 98000007 James 85000001 Zoe 60Case 3:000001 Zoe 60000007 James 85000002 James 90000010 Amy 90#define _CRT_SECURE_NO_DEPRECATE #include#include#include#includeusing namespace std;struct E {char num[7];//char num[6]; char name[9];//char name[8];/*题目意思是学号不超过6位,名字不超过8位,所以我将定义num[6],name[8],结果输出时学号与名字 连在一起应多开一个空间,用来装‘\0’结束符,提示这个字符串结束了。*/int score; }buf[100001]; bool cmp1(E a, E b) {return strcmp(a.num,b.num)<0; //K等于1时,按学号升序排列,学号一般不会有重复的}bool cmp2(E a,E b) {if (strcmp(a.name, b.name) != 0) //k等于2时,按姓名升序排列return strcmp(a.name, b.name) < 0;elsereturn strcmp(a.num, b.num)<0; //若姓名相同,则按学号进行升序排列}bool cmp3(E a,E b) {if (a.score != b.score) { //K等于3时,则按分数进行升序排列return a.score < b.score;}elsereturn strcmp(a.num, b.num)<0; //若分数相同,则按学号进行升序排列} int main() {int n, k,count=0;while (scanf("%d%d", &n, &k) != EOF) {if (n == 0) break;for (int i = 0; i < n; i++) {scanf("%s%s%d", buf[i].num, buf[i].name, &buf[i].score);}count += 1;if (k == 1)sort(buf, buf + n, cmp1);if (k == 2)sort(buf, buf + n, cmp2);if (k == 3)sort(buf, buf + n, cmp3);printf("Case %d:\n", count);for (int i = 0; i < n; i++) {printf("%s %s %d\n", buf[i].num, buf[i].name, buf[i].score);}}system("pause");return 0;}还有一点main函数中的局部变量不能被它的调用函数使用

你可能感兴趣的:(函数,选择排序算法)