题解洛谷P5740 【深基7.例9】最厉害的学生

注意:这是博客文章的随笔同步版本,原版本(也是原创)请观望https://www.cnblogs.com/ryan1015/articles/16640213.html

题目传送门

博客食用更加啦~

这道题嘛,直接用结构体就可以了呀,(其实其他dalao写的我都看不懂······)

不知道结构体的人看这里>>

结构体是一种nb函数,可以为你创建一个个性化的数据类型,具体使用方法:

struct 数据类型名{
   int 数据;
   short 数据;
   long long a...//其他不一一列举了
   int 函数(){//此外还可以定义函数
     return ...
   }
};//别忘了加分号!
int main(){
   数据类型名 a;//只需调用结构体名就可以创建变量~
   a.数据=1;//和string一样,只需调用结构体中的类型名就可定义~

这样,一个难题就解决了!只要在一个struct里定义几个数据,就可以在主函数里调用和定义他啦~

接着,还有一个难题:结构体不可sort排序,怎么才能让他排序起来呢?需要一个布尔值。我们可以定义一个布尔函数cmp,然后return自己想要的那个判断。具体定义方法:

bool cmp(node x,node y)//node为数据类型名
{
	if(x.zf==y.zf)return x.id<y.id;
	return x.zf>y.zf;//这里zf表示总分,>表示从大到小排序
}

然后,我相信这道题你就能迎刃而解了!只要通过cout输入,再sort,再输出,就好了!

\(AC\) \(Code\)

#include<bits/stdc++.h>
using namespace std;
struct node
{
	string name;
	int sx,yw,yy,zf,id;
	
}student[1010];
bool cmp(node x,node y)
{
	if(x.zf==y.zf)return x.id<y.id;
	return x.zf>y.zf;
}
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>student[i].name>>student[i].sx>>student[i].yw>>student[i].yy;
		student[i].zf=student[i].sx+student[i].yy+student[i].yw;
		student[i].id=i;
	}
	sort(student+1,student+n+1,cmp);//
	cout<<student[1].name<<" "         <<student[1].sx<<" "<<student[1].yw<<" "     <<student[1].yy;
	return 0;
}

posted @ 2022-08-30 17:46  FriendlyTiger_1015  阅读(47)  评论(1编辑  收藏  举报