パットBグレード-1015美徳と才能の理論(構造の制約順序)

原题:
	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;
	 
	 



	
} 

おすすめ

転載: blog.csdn.net/weixin_45663946/article/details/109259971