题库:http://ac.jobdu.com/tutorialproblems.php
题号1202排序
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 5 /*递增排序*/ 6 int compInc(const void *a,const void *b) 7 { 8 return *(int *)a-*(int *)b; 9 } 10 11 int main() 12 { 13 int n,*A; 14 while(scanf("%d",&n)!=EOF) 15 { 16 A = (int *)malloc(sizeof(int)*n); 17 int i; 18 if(n<1||n>100) 19 return 0; 20 else 21 { 22 for(i=0;i<n;i++) 23 { 24 scanf("%d",A+i); 25 } 26 qsort(A,n,sizeof(*A),compInc); 27 for(i=0;i<n;i++) 28 { 29 printf("%d ",*(A+i)); 30 } 31 printf(" "); 32 } 33 } 34 return 0; 35 }
题号1061成绩排序
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 typedef struct S{ 6 char name[20]; 7 int age; 8 int grade; 9 }student; 10 11 int cmp(const void *a,const void *b) //实现比较规则 12 { 13 student * aa = (student *)a; 14 student * bb = (student *)b; 15 if(aa->grade!=bb->grade) 16 return aa->grade-bb->grade;//若分数不相同则分数低者在前 17 else if(strcmp(aa->name,bb->name)!=0) 18 return (strcmp(aa->name,bb->name));//若分数相同则名字字典序小者在前 19 else return aa->age-bb->age;//若名字也相同则年龄小者在前 20 } 21 22 int main() 23 { 24 int n; 25 int i; 26 student a[1000]; 27 while(scanf("%d",&n)!=EOF) 28 { 29 for(i=0;i<n;i++) 30 { 31 scanf("%s%d%d",a[i].name,&a[i].age,&a[i].grade); 32 } 33 qsort(a,n,sizeof(student),cmp); 34 for(i=0;i<n;i++) 35 { 36 printf("%s %d %d ",a[i].name ,a[i].age ,a[i].grade ); 37 } 38 } 39 return 0; 40 }
题号1061成绩排序(与上题定义结构的方法不同)
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 struct S{ 6 char name[20]; 7 int age; 8 int grade; 9 }student[1000]; 10 11 int cmp(const void *a,const void *b) //实现比较规则 12 { 13 struct S *aa = (struct S *)a; 14 struct S *bb = (struct S *)b; 15 int tmp=strcmp(aa->name,bb->name); 16 if(aa->grade!=bb->grade) return aa->grade>bb->grade?1:-1;//若分数不相同则分数低者在前 17 else if(tmp!=0) return tmp;//若分数相同则名字字典序小者在前 18 else return aa->age<bb->age?1:-1;//若名字也相同则年龄小者在前 19 } 20 21 int main() 22 { 23 int n; 24 int i; 25 while(scanf("%d",&n)!=EOF) 26 { 27 for(i=0;i<n;i++) 28 { 29 scanf("%s%d%d",student[i].name,&student[i].age,&student[i].grade); 30 } 31 qsort(student,n,sizeof(student[0]),cmp); 32 for(i=0;i<n;i++) 33 { 34 printf("%s %d %d ",student[i].name ,student[i].age ,student[i].grade ); 35 } 36 } 37 return 0; 38 }
题号1185特殊排序
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int cmp(const void *a,const void *b) 5 { 6 return *(int *)a-*(int *)b; 7 } 8 9 int main() 10 { 11 int n,i,*A; 12 while(scanf("%d",&n)!=EOF) 13 { 14 A = (int *)malloc(sizeof(int)*n); 15 for(i=0;i<n;i++) 16 { 17 scanf("%d",A+i); 18 } 19 if(n==1) 20 printf("%d -1",*A); 21 else 22 { 23 qsort(A,n,sizeof(*A),cmp); 24 printf("%d ",*(A+n-1)); 25 for(i=0;i<n-2;i++) 26 { 27 printf("%d ",*(A+i)); 28 } 29 printf("%d",*(A+n-2));//防止多输出一个空格 30 } 31 printf(" ");//这个换行符使光标移到下一行 没有它会wrong answer 32 } 33 return 0; 34 }
题号1023EXCEL排序
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 typedef struct S{ 6 char name[20]; 7 char sno[20]; 8 int score; 9 }student; 10 11 12 int cmp1(const void *a,const void *b) 13 { 14 student *aa = (student *)a; 15 student *bb = (student *)b; 16 return(strcmp(aa->sno,bb->sno)); 17 } 18 19 int cmp2(const void *a,const void *b) 20 { 21 student *aa = (student *)a; 22 student *bb = (student *)b; 23 if(strcmp(aa->name,bb->name)!=0) 24 return(strcmp(aa->name,bb->name)); 25 else return(strcmp(aa->sno,bb->sno)); 26 } 27 28 int cmp3(const void *a,const void *b) 29 { 30 student *aa = (student *)a; 31 student *bb = (student *)b; 32 if(aa->score!=bb->score) 33 return aa->score-bb->score; 34 else return(strcmp(aa->sno,bb->sno)); 35 } 36 37 int main() 38 { 39 int n,C; 40 int i,seq=0; 41 while(scanf("%d",&n)!=EOF) 42 { 43 student *a; 44 a = (student *)malloc(sizeof(student)*n); 45 scanf("%d",&C); 46 if(n!=0) 47 { 48 seq++; 49 for(i=0;i<n;i++) 50 { 51 scanf("%s%s%d",(*(a+i)).sno,(*(a+i)).name,&(*(a+i)).score); 52 } 53 switch(C) 54 { 55 case 1: 56 qsort(a,n,sizeof(student),cmp1); 57 break; 58 case 2: 59 qsort(a,n,sizeof(student),cmp2); 60 break; 61 case 3: 62 qsort(a,n,sizeof(student),cmp3); 63 break; 64 default:break; 65 } 66 } 67 else break; 68 printf("Case %d: ",seq); 69 for(i=0;i<n;i++) 70 { 71 printf("%s %s %d ",(*(a+i)).sno,(*(a+i)).name,(*(a+i)).score); 72 } 73 } 74 return 0; 75 }
由于之前很猪,连题意都没看懂,于是这个题还写了一个一下版本二,一次性输入一次性输出
题号1023EXCEL排序之一次性输入输出
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 typedef struct S{ 6 char name[20]; 7 char sno[20]; 8 int score; 9 }student; 10 11 12 int cmp1(const void *a,const void *b) 13 { 14 student *aa = (student *)a; 15 student *bb = (student *)b; 16 return(strcmp(aa->sno,bb->sno)); 17 } 18 19 int cmp2(const void *a,const void *b) 20 { 21 student *aa = (student *)a; 22 student *bb = (student *)b; 23 if(strcmp(aa->name,bb->name)!=0) 24 return(strcmp(aa->name,bb->name)); 25 else return(strcmp(aa->sno,bb->sno)); 26 } 27 28 int cmp3(const void *a,const void *b) 29 { 30 student *aa = (student *)a; 31 student *bb = (student *)b; 32 if(aa->score!=bb->score) 33 return aa->score-bb->score; 34 else return(strcmp(aa->sno,bb->sno)); 35 } 36 37 int main() 38 { 39 int n[100]; 40 int C[100]; 41 int i=0,j=0,k=0,l=0; 42 student *a; 43 a = (student *)malloc(sizeof(student)*1000); //student a[1000]; 44 while(scanf("%d%d",&n[k],&C[k])!=EOF && n[k]!=0) 45 { 46 j=i; 47 for(;i<n[k]+j;i++) 48 { 49 scanf("%s%s%d",(*(a+i)).sno,(*(a+i)).name,&(*(a+i)).score); 50 } 51 switch(C[k]) 52 { 53 case 1: 54 qsort(a+j,n[k],sizeof(student),cmp1); 55 break; 56 case 2: 57 qsort(a+j,n[k],sizeof(student),cmp2); 58 break; 59 case 3: 60 qsort(a+j,n[k],sizeof(student),cmp3); 61 break; 62 default:break; 63 } 64 k++; 65 } 66 l=k;j=0; 67 for(k=0;k<l;k++) 68 { 69 printf("Case %d: ",C[k]); 70 for(i=0;i<n[k];i++,j++) 71 { 72 printf("%s %s %d ",(*(a+j)).sno,(*(a+j)).name,(*(a+j)).score); 73 } 74 } 75 return 0; 76 }
其中第69行还写错了,题目要求输出测试用例的组数,我写成了C的值...不过在上面那个正确的例子里已经改过来了,这里就不改了
确实这样输出要麻烦一些,写得也有些乱。其中输入的所有struct都是连续的,但输出用变量控制,分开输出。
题号1054字符串内排序
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int cmp(const void *a,const void *b) 5 { 6 return *(char *)a-*(char *)b; 7 } 8 9 int main() 10 { 11 int n,i; 12 char *A; 13 A = (char *)malloc(sizeof(char)*200); 14 while(scanf("%s",A)!=EOF)//尽量不要用gets和puts 15 { 16 for(i=0;A[i]!='