这是我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了