算法训练 P1102

Posted 新生代黑马

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法训练 P1102相关的知识,希望对你有一定的参考价值。

题目描述

  定义一个学生结构体类型student,包括4个字段,姓名、性别、年龄和成绩。然后在主函数中定义一个结构体数组(长度不超过1000),并输入每个元素的值,程序使用冒泡排序法将学生按照成绩从小到大的顺序排序,然后输出排序的结果。
输入格式

  第一行是一个整数N(N<1000),表示元素个数;接下来N行每行描述一个元素,姓名、性别都是长度不超过20的字符串,年龄和成绩都是整型。
输出格式

  按成绩从小到大输出所有元素,若多个学生成绩相同则成绩相同的同学之间保留原来的输入顺序。
输入描述

3
Alice female 18 98
Bob male 19 90
Miller male 17 92

输出描述

Bob male 19 90
Miller male 17 92
Alice female 18 98

测试代码

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 struct student
 5 {
 6     char name[20];
 7     char sex[20];
 8     int age;
 9     int score;
10 };
11 
12 void input(struct student *stu, int n)
13 {
14     int i;
15     for (i = 0; i < n; i++)
16     {
17         scanf("%s%s%d%d", stu[i].name, stu[i].sex, &stu[i].age, &stu[i].score);
18     }
19 }
20 
21 void bubbleSort(struct student *stu, int n)
22 {
23     int i, j, a, s;
24     char na[20], se[20];
25     for (i = 0; i < n - 1; i++)
26     {
27         for (j = 0; j < n - 1 - i; j++)
28         {
29             if ((stu + j)->score > (stu + j + 1)->score)
30             {
31                 strcpy(na, (stu + j)->name);
32                 strcpy((stu + j)->name, (stu + j + 1)->name);
33                 strcpy((stu + j + 1)->name, na);
34 
35                 strcpy(se, (stu + j)->sex);
36                 strcpy((stu + j)->sex, (stu + j + 1)->sex);
37                 strcpy((stu + j + 1)->sex, se);
38 
39                 a = (stu + j)->age;
40                 (stu + j)->age = (stu + j + 1)->age;
41                 (stu + j + 1)->age = a;
42 
43                 s = (stu + j)->score;
44                 (stu + j)->score = (stu + j + 1)->score;
45                 (stu + j + 1)->score = s;
46             }
47         }
48     }
49 }
50 
51 void output(struct student *stu, int n)
52 {
53     int i;
54     for (i = 0; i < n; i++)
55     {
56         printf("%s %s %d %d\n", (stu + i)->name, (stu + i)->sex, (stu + i)->age, (stu + i)->score);
57     }
58 }
59 
60 int main()
61 {
62     struct student stu[1000];
63     int n, i;
64     double sum = 0;
65     scanf("%d", &n);
66     input(stu, n);
67     bubbleSort(stu, n);
68     output(stu, n);
69     return 0;
70 }

 

以上是关于算法训练 P1102的主要内容,如果未能解决你的问题,请参考以下文章

算法训练 P1102

洛谷P1102 A-B数对

洛谷——P1102 A-B数对

洛谷 P1102 A-B数对

P1102 A-B 数对map

P1102 A-B 数对