30分钟的正经题解 | 谁拿了最多奖学金
2026-01-11 20:12:53
发布于:广东
2阅读
0回复
0点赞
我30分钟写的代码:
#include <bits/stdc++.h>
using namespace std;
int n; //表示学生的总数
struct str {
string s; //姓名(s)
int qm, bj; //期末平均成绩(qm),班级评议成绩(bj)
char xs, xb; //是否是学生干部(xs),是否是西部省份学生(xb)
int lw; //发表的论文数(lw)
int sum; //累加的奖学金数
}a[110];
void vo (int j) {
if (a[j].qm > 80 && a[j].lw >= 1) { //期末平均成绩高于80分,并且在本学期内发表1篇或1篇以上论文的学生均可获得
a[j].sum += 8000; //院士奖学金,每人8000元
}
if (a[j].qm > 85 && a[j].bj > 80) { //期末平均成绩高于85分,并且班级评议成绩高于80分的学生均可获得
a[j].sum += 4000; //五四奖学金,每人4000元
}
if (a[j].qm > 90) { //期末平均成绩高于90分
a[j].sum += 2000; //成绩优秀奖,每人2000元
}
if (a[j].qm > 85 && a[j].xb == 'Y') { //期末平均成绩高于85分的西部省份学生均可获得
a[j].sum += 1000; //西部奖学金,每人1000元
}
if (a[j].bj > 80 && a[j].xs == 'Y') { //班级评议成绩高于80分的学生干部均可获得
a[j].sum += 850; //班级贡献奖,每人850元
}
}
int main () {
cin >> n; //输入学生的总数
for (int i = 1;i <= n;i++) {
cin >> a[i].s >> a[i].qm >> a[i].bj >> a[i].xs >> a[i].xb >> a[i].lw;//输入
a[i].sum = 0; //初始化sum
}
for (int i = 1;i <= n;i++) {
vo(i); //调用vo
}
int zong = 0; //奖金总数
for (int i = 1;i <= n;i++) {
zong += a[i].sum;
}
int mx = a[1].sum; //mx奖金总数最多
int i2 = 1; // 金总数最多标记
for (int i = 2;i <= n;i++) {
//打擂台
if (a[i].sum > mx) {
mx = a[i].sum;
i2 = i;
}
}
//输出
cout << a[i2].s << endl;
cout << mx << endl;
cout << zong;
return 0;
}
老师先写了一个错了4个地方结果让我改了30分钟的代码(不知道他是不是故意的🤬🤬🤬):
#include<bits/stdc++.h>
using namespace std;
int n;
struct node{
string name;
int a,b,c;//a-期末平均成绩 b-班级评议成绩 -c发表的论文数
char q,p;//q--是否学生干部 p--是否西部
int sum;//该学生累计奖学金
int id;
}a[110];
bool cmp(node x,node y){
if(x.sum!=y.sum)return x.sum>y.sum;
else return x.id<y.id;
}
int sum2;// 一号错误:重复定义sum
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].name>>a[i].a>>a[i].b>>a[i].q>>a[i].p>>a[i].c;
a[i].id=i;
a[i].sum = 0;//四号错误:没给sum赋值
}
for(int i=1;i<=n;i++){
if(a[i].a>80&&a[i].c>=1)a[i].sum+=8000;
if(a[i].a>85&&a[i].b>80)a[i].sum+=4000; // 错误二:b<=80
if(a[i].a>90)a[i].sum+=2000;
if(a[i].a>85&&a[i].p=='Y')a[i].sum+=1000;
if(a[i].b>80&&a[i].q=='Y')a[i].sum+=850; //错误三:a[i].a>80
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)sum2+=a[i].sum;
cout<<a[1].name<<endl<<a[1].sum<<endl<<sum2;
return 0;
}
这里空空如也






有帮助,赞一个