原题:
https://pintia.cn/problem-sets/994805260223102976/problems/994805307551629312
思路:
建立结构体存储信息
难点:
最后对于四个分类好的结构体进行排序,如果排序有约束条件,使用cmp谓词来解决
贴代码:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
struct Person{
int id;
int def;//德分
int caf;//财分
int zf;//总分
};
bool cmp(const Person &x ,const Person &y)
{
if(x.zf==y.zf)
{
if(x.def==y.def)
{
return x.id<y.id;//升序
}
else
{
return x.def>y.def;//降序
}
}
else
{
return x.zf>y.zf;//降序
}
}
int main()
{
int n;//考生总人数
scanf("%d",&n);
Person person[n];
int l;//最低分数线
scanf("%d",&l);
int h;//优先录取线
scanf("%d",&h);
int i=0;
for(i=0;i<n;i++)//输入考生信息
{
scanf("%d",&person[i].id);
scanf("%d",&person[i].def);
scanf("%d",&person[i].caf);
person[i].zf=person[i].def+person[i].caf;//计算总分
}
//对学生信息进行分类四类创建四个结构体数组分别存入 先判断这类有多少人再去建立结构体
int f1=0,f2=0,f3=0,f4=0;
for(i=0;i<n;i++)
{
if(person[i].caf>= l && person[i].def>= l)
{
if(person[i].caf>=h && person[i].def >=h)
{
f1++;
}else if(person[i].caf<h && person[i].def >=h && person[i].caf>= l)
{
f2++;
}else if(person[i].caf<h && person[i].def <h && person[i].caf>= l && person[i].def>= l&& person[i].def>=person[i].caf)
{
f3++;
}else
{
f4++;
}
}
}
//建立结构体 存储四类人
Person person1[f1];
Person person2[f2];
Person person3[f3];
Person person4[f4];
int p1=0,p2=0,p3=0,p4=0;
for(i=0;i<n;i++)
{
if(person[i].caf>= l && person[i].def>= l)
{
if(person[i].caf>=h && person[i].def >=h)
{
person1[p1].id = person[i].id;
person1[p1].def = person[i].def;
person1[p1].caf = person[i].caf;
person1[p1].zf = person[i].zf;
p1++;
}else if(person[i].caf<h && person[i].def >=h && person[i].caf>= l)
{
person2[p2].id = person[i].id;
person2[p2].def = person[i].def;
person2[p2].caf = person[i].caf;
person2[p2].zf = person[i].zf;
p2++;
}else if(person[i].caf<h && person[i].def <h && person[i].caf>= l && person[i].def>= l&& person[i].def>=person[i].caf )
{
person3[p3].id = person[i].id;
person3[p3].def = person[i].def;
person3[p3].caf = person[i].caf;
person3[p3].zf = person[i].zf;
p3++;
}else
{
person4[p4].id = person[i].id;
person4[p4].def = person[i].def;
person4[p4].caf = person[i].caf;
person4[p4].zf = person[i].zf;
p4++;
}
}
}
//四类人存储完毕
/*
排序规则可以用cmp来建立
*/
//对第一类人排序输出
sort(person1,person1+f1,cmp);
sort(person2,person2+f2,cmp);
sort(person3,person3+f3,cmp);
sort(person4,person4+f4,cmp);
cout<<f1+f2+f3+f4<<endl;
for(int i=0;i<f1;i++)
{
cout<<person1[i].id<<" "<<person1[i].def<<" "<<person1[i].caf<<endl;
}
for(int i=0;i<f2;i++)
{
cout<<person2[i].id<<" "<<person2[i].def<<" "<<person2[i].caf<<endl;
}
for(int i=0;i<f3;i++)
{
cout<<person3[i].id<<" "<<person3[i].def<<" "<<person3[i].caf<<endl;
}
for(int i=0;i<f4;i++)
{
if(i==f4-1)
cout<<person4[i].id<<" "<<person4[i].def<<" "<<person4[i].caf;
else
cout<<person4[i].id<<" "<<person4[i].def<<" "<<person4[i].caf<<endl;
}
return 0;
}
pat乙级-1015 德才论(结构体的约束排序)
猜你喜欢
转载自blog.csdn.net/weixin_45663946/article/details/109259971
今日推荐
周排行