【NYOJ】[1060]谁获得了最高奖学金

文章字数:265

问题描述

问题分析

使用的结构体储存数据
然后直接根据条件来判断

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<stdio.h>
struct per {
	char name[22];
	int q1,q2;
	char flag1,flag2;
	int n,sum;
} stu[120];
int main() {
	int T;
	scanf("%d",&T);
	while(T--) {
		int X;
		scanf("%d",&X);
		int maxi=0,sum=0;
		for(int i=0; i<X; i++) {
			scanf("%s %d %d %c %c %d",&stu[i].name,&stu[i].q1,&stu[i].q2,&stu[i].flag1,&stu[i].flag2,&stu[i].n);
			stu[i].sum=0;
			if(stu[i].q1>80&&stu[i].n>0)
				stu[i].sum+=8000;
			if(stu[i].q1>85&&stu[i].q2>80)
				stu[i].sum+=4000;
			if(stu[i].q1>90)
				stu[i].sum+=2000;
			if(stu[i].q1>85&&stu[i].flag2=='Y')
				stu[i].sum+=1000;
			if(stu[i].q2>80&&stu[i].flag1=='Y')
				stu[i].sum+=850;
			sum+=stu[i].sum;
			if(stu[i].sum>stu[maxi].sum)
				maxi=i;
		}
		printf("%s\n%d\n%d\n",stu[maxi].name,stu[maxi].sum,sum);
	}
	return 0;
}

标程直接进行的判断
-.-感觉并没有我写的清晰

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<iostream>
#include<string>
#include<algorithm>
#include<numeric>
using namespace std;
int calc(int qm,int py,bool gb,bool xb,bool lw) {
	int all=0;
	if(qm>80 && lw) all+=8000;
	if(qm>85&& py>80) all+=4000;
	if(qm>90) all+=2000;
	if(xb&&qm>85) all+=1000;
	if(gb&&py>80) all+=850;
	return all;
}

int main() {
	int n;
	cin>>n;
	while(n--) {
		int m;
		cin>>m;
		int max_num=0,all=0;
		string max_stu;
		while(m--) {
			int qm,py,lw;
			string xm,gbs,xbs;
			cin>>xm>>qm>>py>>gbs>>xbs>>lw;
			bool gb=gbs=="Y",xb=xbs=="Y";
			int num=calc(qm,py,gb,xb,lw>0);
			all+=num;
			if(num>max_num) {
				max_num=num;
				max_stu=xm;
			}
		}
		cout<<max_stu<<endl<<max_num<<endl<<all<<endl;
	}
}

题目地址:谁获得了最高奖学金

该内容采用 CC BY-NC-SA 4.0 许可协议。

如果对您有帮助或存在意见建议,欢迎在下方评论交流。

加载中...