【代码】结构体

哈喽大家好,我是@学霸小羊,今天讲讲结构体。

先看例题:

例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;
}

好啦!今天就讲到这里,拜拜!

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值