AcWing 429. 奖学金
原题链接
简单
作者:
冰语晨星
,
2021-01-17 10:21:20
,
所有人可见
,
阅读 279
一、结构体应用+排序
- 结构体的定义、访问
- 代码一:排序算法应用以及冒泡算法的优化
- 代码二:sort排序应用以及结构体cmp函数写法
代码一:
#include<bits/stdc++.h>
using namespace std;
const int N=310;
struct st{
int num;
int yuwen;
int sum;
} stu[N];
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int x,y,z;
cin>>x>>y>>z;
stu[i].num=i;
stu[i].yuwen=x;
stu[i].sum=x+y+z;
}
for(int i=n;i>1;i--)
{
bool flag=true;
for(int j=1;j+1<=i;j++)
{
if(stu[j].sum<stu[j+1].sum||stu[j].sum==stu[j+1].sum&&stu[j].yuwen<stu[j+1].yuwen||stu[j].sum==stu[j+1].sum&&stu[j].yuwen==stu[j+1].yuwen&&stu[j].num>stu[j+1].num)
{
flag=false;
swap(stu[j],stu[j+1]);
}
}
if(flag) break;
}
for(int i=1;i<=5;i++)
{
cout<<stu[i].num<<" "<<stu[i].sum<<endl;
}
return 0;
}
代码二:
#include<bits/stdc++.h>
using namespace std;
const int N=310;
struct st{
int num;
int yuwen;
int sum;
};
struct st stu[N];
int n;
bool cmp(st &s1,st &s2)
{
if(s1.sum==s2.sum)
if(s1.yuwen==s2.yuwen)
return s1.num<s2.num;
else
return s1.yuwen>s2.yuwen;
return s1.sum>s2.sum;
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int x,y,z;
cin>>x>>y>>z;
stu[i].num=i+1;
stu[i].yuwen=x;
stu[i].sum=x+y+z;
}
sort(stu,stu+n,cmp);
for(int i=0;i<5;i++)
{
cout<<stu[i].num<<" "<<stu[i].sum<<endl;
}
return 0;
}