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

这里写图片描述
这里写图片描述

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

#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;
}

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

#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;
    }
}

题目地址:【NYOJ】[60]谁获得了最高奖学金

posted @ 2016-01-28 19:45  BoilTask  阅读(2)  评论(0编辑  收藏  举报