信息奥赛一本通(1839:【05NOIP提高组】谁拿了最多奖学金)
1839:【05NOIP提高組】誰拿了最多獎學金
時間限制: 1000 ms ??? ??? 內存限制: 65536 KB
提交數: 1853 ??? 通過數: 811
【題目描述】
某校的慣例是在每學期的期末考試之后發放獎學金。發放的獎學金共有五種,獲取的條件各自不同:
1)院士獎學金,每人8000元,期末平均成績高于80分(>80),并且在本學期內發表1篇或1篇以上論文的學生均可獲得;
2)五四獎學金,每人4000元,期末平均成績高于85分(>85),并且班級評議成績高于80分(>80)的學生均可獲得;
3)成績優秀獎,每人2000元,期末平均成績高于90分(>90)的學生均可獲得;
4)西部獎學金,每人1000元,期末平均成績高于85分(>85)的西部省份學生均可獲得;
5)班級貢獻獎,每人850元,班級評議成績高于80分(>80)的學生干部均可獲得;
只要符合條件就可以得獎,每項獎學金的獲獎人數沒有限制,每名學生也可以同時獲得多項獎學金。例如姚林的期末平均成績是87分,班級評議成績82分,同時他還是一位學生干部,那么他可以同時獲得五四獎學金和班級貢獻獎,獎金總數是4850元。
現在給出若干學生的相關數據,請計算哪些同學獲得的獎金總數最高(假設總有同學能滿足獲得獎學金的條件)。
【輸入】
第一行是一個整數N(1 <= N <= 100),表示學生的總數。接下來的N行每行是一位學生的數據,從左向右依次是姓名,期末平均成績,班級評議成績,是否是學生干部,是否是西部省份學生,以及發表的論文數。姓名是由大小寫英文字母組成的長度不超過20的字符串(不含空格);期末平均成績和班級評議成績都是0到100之間的整數(包括0和100);是否是學生干部和是否是西部省份學生分別用一個字符表示,Y表示是,N表示不是;發表的論文數是0到10的整數(包括0和10)。每兩個相鄰數據項之間用一個空格分隔。
【輸出】
三行,第一行是獲得最多獎金的學生的姓名,第二行是這名學生獲得的獎金總數。如果有兩位或兩位以上的學生獲得的獎金最多,輸出他們之中在輸入文件中出現最早的學生的姓名。第三行是這N個學生獲得的獎學金的總數。
【輸入樣例】
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【輸出樣例】
ChenRuiyi 9000 28700【參考代碼】
C代碼:
#include <stdio.h> #define N 25 char s[N][N]; int main() {int i,tmp=0,n,sum=0,max=0,score1,score2,num,a,b,k;char c1,c2;scanf("%d",&n);for(i=0;i<n;i++){scanf("%s %d %d %c %c %d",&s[i],&score1,&score2,&c1,&c2,&num);a=c1=='Y' ? 1 : 0; // 是否是學生干部 b=c2=='Y' ? 1 : 0; // 是否是西部省份學生tmp=0;if((score1>80) && (num>0)) // 院士獎學金 tmp+=8000;if((score1>85) && (score2>80)) // 五四獎學金 tmp+=4000;if(score1>90) // 成績優秀獎 tmp+=2000;if(b && (score1>85)) // 西部獎學金 tmp+=1000;if(a && (score2>80)) // 班級貢獻獎 tmp+=850;sum+=tmp; // 獎學金總數if(tmp>max){max=tmp;k=i;}}printf("%s\n%d\n%d\n",s[k],max,sum);return 0; }C++代碼:
#include <iostream> using namespace std; string name,bestname; int main() {int i,tmp=0,n,sum=0,max=0,score1,score2,num;bool a,b;char c1,c2;cin >> n;for(i=0;i<n;i++){cin >> name >> score1 >> score2 >> c1 >> c2 >> num;a=c1=='Y'; // 是否是學生干部 b=c2=='Y'; // 是否是西部省份學生tmp=0;if((score1>80) && (num>0)) // 院士獎學金 tmp+=8000;if((score1>85) && (score2>80)) // 五四獎學金 tmp+=4000;if(score1>90) // 成績優秀獎 tmp+=2000;if(b && (score1>85)) // 西部獎學金 tmp+=1000;if(a && (score2>80)) // 班級貢獻獎 tmp+=850;sum+=tmp; // 獎學金總數if(tmp>max){max=tmp;bestname=name;}}cout << bestname << endl;cout << max << endl;cout << sum << endl;return 0; }http://ybt.ssoier.cn:8088/problem_show.php?pid=1839
?
?
?
總結
以上是生活随笔為你收集整理的信息奥赛一本通(1839:【05NOIP提高组】谁拿了最多奖学金)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通(1223:An Eas
- 下一篇: 信息学奥赛一本通 2004:【20CSP