用户:
树林归来查看:4 回复:3 评论:4 创建时间:2022-08-19T07:48:29
#include <iostream>
#include <string>
using namespace std;
struct tStudent{
string name;
int chinese,math;
int total;
};
tStudent a[100];
int n;
int main(){
cin>>n;
for(int i = 0;i < n;i++){
cin>>a[i].name>>a[i].chinese>>a[i].math;
a[i].total = a[i].chinese + a[i].math;
}
for(int i = 0;i < n;i++){
for(int j = 0;j < n - i + 1;i++){
if(a[j].total < a[j + 1].total){
swap(a[j],a[j + 1]);
}
}
}
for(int i = 0;i < n;i++){
cout<<endl<<a[i].name<<" "<<a[i].chinese<<" "<<a[i].math<<" "<<a[i].total;
}
}
这是一个统计成绩的屑代码()
【输入】第一行输入学生的数量,然后按数量输入每个学生的姓名、语文、数学成绩。
【输出】按每个学生的总分高低来输出学生的姓名、语文数学成绩和总分。
无畏的编程猫d_yy如果总分一样时要按数学排,数学再一样时按语文排,语文再一样时按名字的字典序排,你要怎么办?
很简单,不就写3个if嘛……
那其实还有一种更好的解决方案:sort+cmp。
两者结合真的非常非常非常好用!!!!!
sort非常方便,它碾压了很多好写但效率不高的排序,二分排序除外,但它很难写……
头文件:#include <algorithm>
格式:sort(l+1,r+1)//下标从“1”开始时格式是这个,从零开始为sort(l,r)
进阶:sort(l+1,r+1,cmp);//多用于结构体,巨好用
如果想要达到我说那种效果,具体代码即如下:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
struct node
{
string name;
int ch,ma,to;
}a[100];
bool cmp(node a,node b)
{
if(a.to!=b.to) return a.to>b.to;
if(a.ma!=b.ma) return a.ma>b.ma;
if(a.ch!=b.ch) return a.ch>b.ch;
return a.name>b.name;
}
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%s %d %d",a[i].name,a[i].ch,a[i].ma);
a[i].to=a[i].ch+a[i].ma;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;++i) printf("%s %d %d %d",a[i].name,a[i].ch,a[i].ma,a[i].to);
}
清爽了不少,不是吗?
sort本身也很喵,你不想写排序可以用它(上文说过它比一般的排序快很多),除非是喵板子题不让用sort。
点赞0
评论