华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2424|回复: 8
打印 上一主题 下一主题

P1051 谁拿了最多奖学金

[复制链接]

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
跳转到指定楼层
楼主
发表于 2018-4-19 11:14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题目描述
某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:

院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;
五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;
成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;
西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;
班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;
只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。

现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。

输入输出格式
输入格式:
输入文件第一行是一个整数N(1 <= N <= 100),表示学生的总数。

接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。

输出格式:
输出文件包括三行。

第一行是获得最多奖金的学生的姓名。

第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。

第三行是这N个学生获得的奖学金的总数。

输入输出样例
输入样例#1:
4
YaoLin 87 82 Y N 0
ChenRuiyi 88 78 N Y 1
LiXin 92 88 N N 0
ZhangQin 83 87 Y N 1
输出样例#1:
ChenRuiyi
9000
28700
说明
2005提高组第一题

回复

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
沙发
 楼主| 发表于 2018-4-19 11:15:18 | 只看该作者
此题排序不是重点,读入数据处理才是
回复 支持 反对

使用道具 举报

9

主题

89

帖子

292

积分

华一学生

积分
292
板凳
发表于 2018-4-21 20:58:19 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. const int mx=110;
  4. string name[mx];
  5. int lastgrade[mx],classgrade[mx],paper[mx];
  6. bool ganbu[mx],west[mx];
  7. int i,n,sum[mx],ans,ansi,sumn;
  8. int main()
  9. {
  10.     cin>>n;
  11.     for (i=1;i<=n;i++)
  12.     {
  13.         string b1,b2;
  14.         cin>>name[i]>>lastgrade[i]>>classgrade[i]>>b1>>b2>>paper[i];
  15.         if (b1[0]=='Y') ganbu[i]=1;
  16.         else ganbu[i]=0;
  17.         if (b2[0]=='Y') west[i]=1;
  18.         else west[i]=0;
  19.     }
  20.     ans=0,sumn=0;
  21.     for (i=1;i<=n;i++)
  22.     {
  23.         if (lastgrade[i]>80 && paper[i]>=1) sum[i]+=8000;
  24.         if (lastgrade[i]>85 && classgrade[i]>80) sum[i]+=4000;
  25.         if (lastgrade[i]>90) sum[i]+=2000;
  26.         if (lastgrade[i]>85 && west[i]==1) sum[i]+=1000;
  27.         if (classgrade[i]>80 && ganbu[i]==1) sum[i]+=850;

  28.         if (sum[i]>ans)
  29.         {
  30.             ans=sum[i];
  31.             ansi=i;
  32.         }
  33.         sumn+=sum[i];
  34.     }
  35.     cout<<name[ansi]<<endl<<ans<<endl<<sumn;
  36.     return 0;
  37. }
复制代码
回复 支持 反对

使用道具 举报

9

主题

15

帖子

57

积分

注册会员

Rank: 2

积分
57
地板
发表于 2018-4-22 11:48:24 | 只看该作者
本帖最后由 王令欧 于 2018-4-22 16:53 编辑
  1. #include <stdio.h>//王令欧
  2. #include <stdlib.h>

  3. struct student//定义结构体
  4. {
  5.     char name[21],west,king;
  6.     int score,says,writing;
  7. };
  8. struct student a[101];
  9. int main()
  10. {
  11.     int i,k,n,t,sum=0,max=0;
  12.     scanf("%d",&n);
  13.     for(i=0;i<=n-1;i++)
  14.         scanf("%s%d%d %c %c%d",a[i].name,&a[i].score,&a[i].says,&a[i].king,&a[i].west,&a[i].writing);//输入
  15.     for(i=0;i<=n-1;i++)
  16.     {
  17.         t=0;
  18.         if(a[i].score>80 && a[i].writing>=1) t+=8000;
  19.         if(a[i].score>85 && a[i].says>80) t+=4000;
  20.         if(a[i].score>90) t+=2000;
  21.         if(a[i].score>85 && a[i].west=='Y') t+=1000;
  22.         if(a[i].says>80 && a[i].king=='Y') t+=850;//判断+计算奖学金
  23.         sum+=t;
  24.         if(t>max)//刷新最多奖学金
  25.         {
  26.             max=t;
  27.             k=i;
  28.         }
  29.     }
  30.     printf("%s\n%d\n%d\n",a[k].name,max,sum);
  31.     return 0;
  32. }
复制代码
回复 支持 反对

使用道具 举报

9

主题

158

帖子

470

积分

华一学生

积分
470
QQ
5#
发表于 2018-4-29 19:53:03 | 只看该作者
  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cmath>
  4. using namespace std;
  5. int n,tot;
  6. struct student
  7. {
  8.     string name;
  9.     int qm,bj;
  10.     char bgb,xb;
  11.     int lw;
  12.     int ans;
  13.     int sum;
  14. }a[101];
  15. int comp(student &x,student &y)
  16. {
  17.     if(x.ans==y.ans)return x.sum<y.sum;
  18.     else return x.ans>y.ans;
  19. }
  20. int main()
  21. {
  22.     scanf("%d",&n);
  23.     for(int i=1;i<=n;i++)
  24.     {
  25.         cin>>a[i].name>>a[i].qm>>a[i].bj>>a[i].bgb>>a[i].xb>>a[i].lw;
  26.         if(a[i].qm>80&&a[i].lw>=1)a[i].ans+=8000;
  27.         if(a[i].qm>85&&a[i].bj>80)a[i].ans+=4000;
  28.         if(a[i].qm>90)a[i].ans+=2000;
  29.         if(a[i].xb=='Y'&&a[i].qm>85)a[i].ans+=1000;
  30.         if(a[i].bj>80&&a[i].bgb=='Y')a[i].ans+=850;
  31.         a[i].sum=i;
  32.         tot+=a[i].ans;
  33.     }
  34.     sort(a+1,a+n+1,comp);
  35.     cout<<a[1].name<<endl<<a[1].ans<<endl<<tot;
  36.     return 0;
  37. }
复制代码
回复 支持 反对

使用道具 举报

14

主题

106

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
6#
发表于 2018-6-30 11:04:16 | 只看该作者
hyf
#include<iostream>
using namespace std;
string a,x;
char d,e;
int b,c,f,n,i;
int maxs=-1,s,ss;
int main()
{
    cin>>n;
    for(i=1;i<=n;i++)
    {
        cin>>a>>b>>c>>d>>e>>f;
        s=0;
        if((c>80)&&(d=='Y')) s+=850;
        if(b>80)
        {
            if(f) s=s+8000;
            if(b>85)
            {
                if(c>80) s+=4000;
                if(e=='Y') s+=1000;
                if(b>90) s+=2000;
            }
       }
        ss=ss+s;
        if(s>maxs)
        {
            x=a;
            maxs=s;
        }
    }
    cout<<x<<endl<<maxs<<endl<<ss;
    return 0;
}
回复 支持 反对

使用道具 举报

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
7#
发表于 2018-6-30 17:28:41 | 只看该作者
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. int sc,mo=0,gr,nu,n,maxm=0,mall,i,j;
  5. char po,pr;
  6. string nam;
  7. char na[100],name[100];
  8. int main()
  9. {
  10.     cin>>n;
  11.     for(i=1;i<=n;i++)
  12.     {
  13.         mo=0;
  14.         for(j=0;j<100;j++)
  15.         na[j]=' ';
  16.         cin>>nam>>sc>>gr>>po>>pr>>nu;
  17.         for(j=0;j<nam.size();j++)
  18.             na[j]=nam[j];
  19.         if(sc>80)
  20.         {
  21.             if(nu>=1)mo+=8000;
  22.             if(sc>85 && gr>80)mo+=4000;
  23.             if(sc>90)mo+=2000;
  24.             if(sc>85 && pr=='Y')mo+=1000;
  25.         }
  26.             if(gr>80 && po=='Y')mo+=850;
  27.         mall+=mo;
  28.         if(mo>maxm)
  29.         {
  30.             for(j=0;j<100;j++)name[j]=' ';
  31.             for(j=0;j<nam.size();j++)
  32.             name[j]=na[j];
  33.             maxm=mo;
  34.         }
  35.     }
  36.     while(name[j]!=' ')j++;
  37.     for(i=0;i<j;i++)
  38.         cout<<name[i];
  39.     cout<<endl;
  40.     cout<<maxm<<endl;
  41.     cout<<mall;
  42. }
复制代码
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
8#
 楼主| 发表于 2018-6-30 20:59:17 | 只看该作者
楼上两位同学很好!
回复 支持 反对

使用道具 举报

2

主题

105

帖子

306

积分

中级会员

Rank: 3Rank: 3

积分
306
9#
发表于 2018-7-30 00:11:41 | 只看该作者
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <cstring>
  6. #include <algorithm>
  7. using namespace std;

  8. int main(){
  9.     int n,b,c,f,i,max=0,maxR=0,money=0,moneymax=0,moneyall=0,maxi=0;
  10.     char d,e,a[120][25];
  11.     scanf("%d",&n);
  12.     for(i=1;i<=n;i++)
  13.     {
  14.             money=0;
  15.             scanf("%s %d %d %c %c %d",a[i],&b,&c,&d,&e,&f);
  16.             if(b>80&&f>=1)
  17.             money=money+8000;
  18.             if(b>85&&c>80)
  19.             money=money+4000;
  20.             if(b>90)
  21.             money=money+2000;
  22.             if(e=='Y'&&b>85)
  23.             money=money+1000;
  24.             if(d=='Y'&&c>80)
  25.             money=money+850;
  26.             moneyall=moneyall+money;
  27.             if(money>moneymax)
  28.             {
  29.                     moneymax=money;
  30.                     maxi=i;
  31.                 }
  32.         }
  33.         puts(a[maxi]);
  34.         printf("%d\n%d",moneymax,moneyall);
  35.     return 0;
  36. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-25 02:05 , Processed in 0.150079 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表