P1051 [NOIP2005 提高组] 谁拿了最多奖学金 c++题解

-^-


根据题意列出一下变量:

学生的总数-N
姓名-name
期末平均成绩-og
班级评议成绩-cg
是否是学生干部-f1
是否是西部省份学生-f2
发表的论文数-w
奖学金-money

整理后得结构体(Studengt):

struct Student{
	string name;
	bool f1,f2;
	long long og,cg;
	long long w;
	int money=0;
};

根据题意列出判断奖学金的函数:

int N,maxx=-1,ans=0,p;//maxx为最高获得的奖学金,ans为奖学金共计,p表示获奖学金最多的人的编号
int pd(Student *s,int i){
	if(s->og>80&&s->w>=1){
		s->money+=8000;
	}
	if(s->og>85&&s->cg>80){
		s->money+=4000;
	}
	if(s->og>90){
		s->money+=2000;
	}
	if(s->og>85&&s->f2==true){
		s->money+=1000;
	}
	if(s->cg>80&&s->f1==true){
		s->money+=850;
	}
	ans+=s->money;
	if(s->money>maxx){
		maxx=s->money;
		p=i;
	}
	return 0;
}

完整AC代码(珍爱账号,远离抄袭):

#include 
using namespace std;
struct Student{
	string name;
	bool f1,f2;
	long long og,cg;
	long long w;
	int money=0;
};
//
Student stu[1001];
int N,maxx=-1,ans=0,p;
char k;
//
int pd(Student *s,int i){
	if(s->og>80&&s->w>=1){
		s->money+=8000;
	}
	if(s->og>85&&s->cg>80){
		s->money+=4000;
	}
	if(s->og>90){
		s->money+=2000;
	}
	if(s->og>85&&s->f2==true){
		s->money+=1000;
	}
	if(s->cg>80&&s->f1==true){
		s->money+=850;
	}
	ans+=s->money;
	if(s->money>maxx){
		maxx=s->money;
		p=i;
	}
	return 0;
}
//
int main() {
	cin>>N;
	for(int i=1;i<=N;i++){
		cin>>stu[i].name;
		cin>>stu[i].og>>stu[i].cg;
		cin>>k;
		if(k=='Y') stu[i].f1=true;
		else stu[i].f1=false;
		cin>>k;
		if(k=='Y') stu[i].f2=true;
		else stu[i].f2=false;
		cin>>stu[i].w;
		//
		pd(&stu[i],i);
	}
	
	cout<<stu[p].name<<"\n";
	printf("%d\n%d",maxx,ans);
	return 0;
}

你可能感兴趣的:(c++,算法,开发语言)