UOJ Logo www的博客

博客

OI路上的第一篇博客(#4 领奖)

2021-01-26 17:50:09 By www

这是我OI道路上的第一篇博客。

4题解

问题描述

一天,poorpool让一群人上台领奖。poorpool所在的学校非常有钱,他们的奖励是这样的:

竞赛得奖。省一1000元,省二500元,省三300元。
考试得奖。如果是年级一百及以前800元,否则如果是二百及以前600元,否则如果是三百及以前400元。
干部得奖。是学生会干部则150元,是班干部则125元。

为了增加趣味性,所有编号末尾是3的学生只拿233元,无论他是什么身份。

输入格式

第一行是学生人数nn。

下来nn行,每行先是这个学生的编号,然后有三个整数:

第一个代表竞赛拿了几等奖,0代表未得,123分别对应省一二三。

第二个代表考试在年级里排了多少名。

第三个代表干部情况,0代表不是干部,1代表是学生会干部,2代表是班干部,3代表既是学生会干部又是班干部。

关于这道题可以看出用结构体可以储存学生的信息,计算简便,可读性强。

这道题还是比较简单的,废话不多说,下面是代码:

include

using namespace std;

int prize[1000000]; //用一个整形数组来储存每个同学的奖金

struct studentl{
int b_h,js,nj,jp; //b_h即编号,js即竞赛,nj即年级排名,jp即干部。 };

studentl student[1000000];

int main (){

int n;//n是指学生个数 

scanf("%d",&n);

for(int i=1;i<=n;i++){

    scanf("%d%d%d%d",&student[i].b_h,&student[i].js,&student[i].nj,&student[i].jp);

    if(student[i].js==1) prize[i]+=1000;    //计算竞赛的奖金 

    else if(student[i].js==2) prize[i]+=500;

    else if(student[i].js==3) prize[i]+=300;

    if(student[i].nj<=100) prize[i]+=800;    //计算年级排名的奖金 

    else if(student[i].nj<=200) prize[i]+=600;

    else if(student[i].nj<=300) prize[i]+=400;

    if(student[i].jp==1) prize[i]+=150;        //计算班干部的奖金 

    else if(student[i].jp==2) prize[i]+=125;

    else if(student[i].jp==3) prize[i]+=275;

    if(student[i].b_h%10==3) prize[i]=233;
} 

for(int i=1;i<=n;i++){

    if(prize[i]==233||prize[i]>=700){    //判断输出 

    printf("%d %d\n",prize[i],student[i].b_h);

    }                                 
}
return 0;

}//在开始的时候选择了用cin,cout来输入输出,但超时了,换用scanf和printf就ok了

评论

NaCl
- 已将您的题解加入 http://oj.lfyzit.com/blogof/nacl/blog/379 中。 - 在 Markdown 插入代码时,为正确渲染代码,请在代码前加「```c++」,代码后加「```」,二者都要独占一行。 来自 3 年前的老选手
leon
@www戬打Call

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。