解题思路:

定义 一个结构体->构造一个动态数组->输入->排序->输出

注意事项:

1、比较字符串需要用到strcmp(str1,str2);

2、这个题的输入并不是一次,而是需要多组数据输入;



参考代码(自定义函数):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# include <stdio.h>
# include <malloc.h>
# include <string.h>     //里面有strcmp(str1, str2);函数
 
//定义一个结构体类型
struct Student
{
    char name[101];  
    int score;
    int age;
};
void sort(struct Student * pArr, int N);   //排序函数
int main()
{
        int i;
        int N;
        struct Student * pArr;  
        while(scanf("%d", &N)!=EOF)
    {
               //分配内存
                pArr = (struct Student *)malloc(sizeof(struct Student)*N);
            //输入
            for( i=0; i<N; i++)
            scanf("%s %d %d", pArr[i].name, &pArr[i].age, &pArr[i].score);
             
            //排序
                sort(pArr, N);
         
                //输出   
            for( i=0; i<N; i++)
                 printf("%s %d %d\n", pArr[i].name, pArr[i].age, pArr[i].score);
    }
 
    return 0;
}
//排序函数
void sort(struct Student * pArr, int N)  
{
    int i, j;
    struct Student t;
         
        //冒泡排序
    for (i=0; i<N; i++)
    {
        for (j=i+1; j<N; j++)
        {
            if (pArr[j].score < pArr[i].score)
            {
                t = pArr[j];
                pArr[j] = pArr[i];
                pArr[i] = t;
            }
        else if (pArr[j].score == pArr[i].score && strcmp(pArr[i].name, pArr[j].name)>0)
            {
                t = pArr[j];
                pArr[j] = pArr[i];
                pArr[i] = t;
            }
        else if (pArr[j].score == pArr[i].score && pArr[j].age < pArr[i].age && strcmp(pArr[j].name, pArr[i].name)==0)
            {
                t = pArr[j];
                pArr[j] = pArr[i];
                pArr[i] = t;
            }
        }
    }
 
}

参考代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# include <stdio.h>
# include <string.h>   //里面有strcmp(str1, str2);函数      
struct Student
{
    char name[101];
    int score;
    int age;
}S[2000], t;  //s[2000]里面的数字大一点
 
int main()
{
    int N;    
    int i, j;
    while(scanf("%d", &N)!=EOF)
    {
        //输入
        for(i=0; i<N; i++)
        {
            scanf("%s %d %d", S[i].name, &S[i].age, &S[i].score);
        }
        //按成绩排序
        for (i=0; i<N; i++)
        {
            for (j=i+1; j<N; j++)
            {
                if (S[j].score < S[i].score)
                {
                    t = S[j];
                    S[j] = S[i];
                    S[i] = t;
                }
                else if (S[j].score == S[i].score && strcmp(S[i].name, S[j].name)>0)
                {
                    t = S[j];
                    S[j] = S[i];
                    S[i] = t;
                }
                else if (S[j].score == S[i].score && S[j].age < S[i].age && strcmp(S[j].name, S[i].name)==0)
                {
                    t = S[j];
                    S[j] = S[i];
                    S[i] = t;
                }
            }
        }
        //输出
        for(i=0; i<N; i++)
            printf("%s %d %d\n", S[i].name, S[i].age, S[i].score);
    }
 
    return 0;
}

我是一个小垃圾,这题我做了很久,错了很多次。

点赞(0)
 

9.6 分

3 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 5 条评论

kkk 4年前 回复TA
@kkk 这个题必须用strcmp函数,我是取的首字母,所以错了
啊噗卡巴 4年前 回复TA
@kkk scanf("%s%d%d",node[i].name,&node[i].age,&node[i].num);字符串的用scanf输入不用取地址符
kkk 4年前 回复TA
求助楼主,为什么我的一直答案错误啊
kkk 4年前 回复TA
if(node[i].na==node[j].na&&node[i].num==node[j].num&&node[i].age>node[j].age){
				swap(&node[i],&node[j]);
			}
		}
	}
	for(int i=0;i<n;i++){
		printf("%s %d %d\n",node[i].name,node[i].age,node[i].num);
	}
}
}
}
kkk 4年前 回复TA
#include <stdio.h>
struct date{
	char name[101];
	int age;
	int num;
	char na;
}node[1001];
void swap(struct date *p,struct date *q){
	struct date temp;
	temp=*p;
	*p=*q;
	*q=temp;
}
int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		if(n<=1000&&n>0){
	for(int i=0;i<n;i++){
		scanf("%s %d %d",&node[i].name,&node[i].age,&node[i].num);
		node[i].na=node[i].name[0];
	}
	for(int i=0;i<n-1;i++){
		for(int j=i+1;j<n;j++){
			if(node[i].num>node[j].num){
				swap(&node[i],&node[j]);
			}
			if(node[i].na>node[j].na&&node[i].num==node[j].num){
				swap(&node[i],&node[j]);
			}