哈喽大家好,我是@学霸小羊,今天讲讲结构体。
先看例题:
例1.老师给了小杨一份同学们的考试成绩,包括语数英三科,老师让小明按照总分排序,请你帮帮他吧!
输入数据:
第1行 学生总人数n(n<=1000)
第2~n+1行 每行包括3个数据 分别代表 这位同学的 语数英成绩(成绩<=100)
输出数据:
输出排序后同学们的语、数、英成绩
输入样例1:
5
89 78 100
97 90 93
78 89 67
34 78 90
90 99 100
输出样例1:
90 99 100
97 90 93
89 78 100
78 89 67
34 78 90
首先我第一时间想到的,是定义多个数组,代码打出来后,发现太复杂了!
最大的原因是不能用 sort() 排序!
#include <bits/stdc++.h>
using namespace std;
long long n,yu[1001],shu[1001],ying[1001],zonghe[1001];
int main()
{cin>>n;for(int i=1;i<=n;i++){cin>>yu[i]>>shu[i]>>ying[i];zonghe[i]=yu[i]+shu[i]+ying[i];}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){if(zonghe[i]<zonghe[j]) {swap(zonghe[i],zonghe[j]);swap(yu[i],yu[j]);swap(shu[i],shu[j]);swap(ying[i],ying[j]);}}}for(int i=1;i<=n;i++){cout<<yu[i]<<" "<<shu[i]<<" "<<ying[i]<<"\n";}return 0;
}
你也看到了吧,哗啦啦一大串,于是我找老师学习了一下,老师说用结构体。
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,就像char、int那些一样,只不过,这个数据类型可以自己定义包含什么,包含的变量被称为成员。
定义一个结构体,如下:
struct stu
{数据类型 成员名1;数据类型 成员名2;数据类型 成员名3;······
}
例如:
struct stu
{int n;//定义这个结构体的成员n
};
那么这题,就可以定义一个这样的结构体:
struct stu
{int yu,shu,ying,zonghe;
}a[1001];
为什么用结构体呢?因为结构体可以快排!
#include <bits/stdc++.h>
using namespace std;
struct stu
{int yu,shu,ying,zonghe;
}a[1001];
bool cmp(stu x,stu y)
{return x.zonghe>y.zonghe;
}
long long n;
int main()
{cin>>n;for(int i=1;i<=n;i++){cin>>a[i].yu>>a[i].shu>>a[i].ying;a[i].zonghe=a[i].yu+a[i].shu+a[i].ying;}sort(a+1,a+n+1,cmp);for(int i=1;i<=n;i++){cout<<a[i].yu<<" "<<a[i].shu<<" "<<a[i].ying<<"\n";}return 0;
}
好啦!今天就讲到这里,拜拜!