C语言九度OJ机试题源码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言九度OJ机试题源码相关的知识,希望对你有一定的参考价值。

题库: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("\n");
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\n",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\n",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\n-1",*A);
21         else
22         {
23             qsort(A,n,sizeof(*A),cmp);
24             printf("%d\n",*(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("\n");//这个换行符使光标移到下一行 没有它会wrong answer
32     }
33     return 0;
34 }

 

 题号1023EXCEL排序

 

(更新中...)

以上是关于C语言九度OJ机试题源码的主要内容,如果未能解决你的问题,请参考以下文章

九度oj 1048

九度oj 题目1397:查找数段

刷题的网站

oj--九度oj---1435

oj---九度oj---1432

九度oj 题目1473:二进制数(stack)