6 条题解
-
2
#include<bits/stdc++.h> using namespace std; string maxname = "NaN"; int n = 99999, sumjj = 0, maxjxj = -999999; struct student { string name; int ends, cls, lunwen; char ganbu, west; int jxj; }a[1005]; int main() { cin >> n; for(int i = 1; i <= n; i++) cin >> a[i].name >> a[i].ends >> a[i].cls >> a[i].ganbu >> a[i].west >> a[i].lunwen; for(int i = 1; i <= n; i++) { if(a[i].ends > 80 && a[i].lunwen >= 1) a[i].jxj += 8000; if(a[i].ends > 85 && a[i].cls > 80) a[i].jxj += 4000; if(a[i].ends > 90) a[i].jxj += 2000; if(a[i].ends > 85 && a[i].west == 'Y') a[i].jxj += 1000; if(a[i].cls > 80 && a[i].ganbu == 'Y') a[i].jxj += 850; //--------------------------------------------------- if(a[i].jxj > maxjxj) { maxjxj = a[i].jxj; maxname = a[i].name; } sumjj += a[i].jxj; } cout << maxname << endl << maxjxj << endl << sumjj << endl; }
-
2
解析
按照题意,对结构体进行操作
题解
#include <iostream> using namespace std; struct st { string name;//姓名 int qm, bj;//期末、班级评议 char gb, west;//干部、西部 int lw;//论文 } s[101]; //s[0]~s[100] 都是一个 st 类型的变量 int main() { int n, maxi, maxx = 0, total = 0; cin >> n; for (int i = 1; i <= n; i++) { int sum = 0; cin >> s[i].name >> s[i].qm >> s[i].bj >> s[i].gb >> s[i].west >> s[i].lw; if (s[i].qm > 80 && s[i].lw >= 1) sum += 8000; if (s[i].qm > 85 && s[i].bj > 80) sum += 4000; if (s[i].qm > 90) sum += 2000; if (s[i].west == 'Y' && s[i].qm > 85) sum += 1000; if (s[i].gb == 'Y' && s[i].bj > 80) sum += 850; if (maxx < sum) maxx = sum, maxi = i; total += sum; } cout << s[maxi].name << endl << maxx << endl << total; return 0; }
-
1
压缩流yasuo
对了,题解有点多
为了观赏性,就写次using namespace std;请见谅(绝不是懒)
#include <iostream> using namespace std; struct stud{ string name; int qmcj,bjyp,lw,yuan; char gb,xstu; }stu[105],maxn; int main(){ int q,sum=0;cin>>q; for(int i=0;i<q;i++){ cin>>stu[i].name>>stu[i].qmcj>>stu[i].bjyp>>stu[i].gb>>stu[i].xstu>>stu[i].lw;} for(int i=0;i<q;i++){ if(stu[i].qmcj>80&&stu[i].lw>=1) stu[i].yuan+=8000; if(stu[i].qmcj>85&&stu[i].bjyp>80) stu[i].yuan+=4000; if(stu[i].qmcj>90) stu[i].yuan+=2000; if(stu[i].qmcj>85&&stu[i].xstu=='Y') stu[i].yuan+=1000; if(stu[i].bjyp>80&&stu[i].gb=='Y') stu[i].yuan+=850; if(stu[i].yuan>maxn.yuan) maxn=stu[i]; sum+=stu[i].yuan;} cout<<maxn.name<<endl<<maxn.yuan<<endl<<sum; return 0;}
-
1
题解,但是有亿点多
首先,因为这道题会给多行数据,且每行数据的每一个数据类型不同,所以我们考虑用结构体解题(因为要求最大值,所以还需要创建一个类型为结构体类型名的maxn这个变量)
struct student { string name; int qimo,banji,lunwen,money; char ganbu,xibu; }; student s[105],maxn;
接下来,根据题目给的条件,写一个用来计算每个同学可以获得的奖学金的函数(主要是方便看和检查,直接把函数的内容放到主函数里也行)
int get(student a) { int m = 0; if(a.qimo > 80 && a.lunwen >= 1)//院士 m += 8000; if(a.qimo > 85 && a.banji > 80)//五四 m += 4000; if(a.qimo > 90)//成绩 m += 2000; if(a.qimo > 85 && a.xibu == 'Y')//西部 m += 1000; if(a.banji > 80 && a.ganbu == 'Y')//班级 m += 850; return m; }
最后,遍历s,如果s[i].money大于maxn.money的话,那么把maxn设为s[i](别忘了求和),然后输出
#include <iostream> #include <string> using namespace std; struct student { string name; int qimo,banji,lunwen,money; char ganbu,xibu; }; student s[105],maxn; int get(student a) { int m = 0; if(a.qimo > 80 && a.lunwen >= 1) m += 8000; if(a.qimo > 85 && a.banji > 80) m += 4000; if(a.qimo > 90) m += 2000; if(a.qimo > 85 && a.xibu == 'Y') m += 1000; if(a.banji > 80 && a.ganbu == 'Y') m += 850; return m; } int main() { int n,sum = 0; cin >> n; for(int i = 0;i < n;i++) { cin >> s[i].name >> s[i].qimo >> s[i].banji >> s[i].ganbu >> s[i].xibu >> s[i].lunwen; s[i].money = get(s[i]); } for(int i = 0;i < n;i++) { if(s[i].money > maxn.money) maxn = s[i]; sum += s[i].money; } cout << maxn.name << endl << maxn.money << endl << sum; return 0; }
-
1
#include<iostream> #include<algorithm> using namespace std; #define si s[i]//s[i]这么麻烦,为什么不用si代替呢 struct student { string name; int eresult; int cresult; char ganbu; char west; int lun; int count; int money; }s[105]; bool cmp(student x,student y) { if(x.money!=y.money) return x.money>y.money; else return x.count<y.count; } int main() { int n,sum=0; cin>>n; for(int i=0;i<=n;i++) { cin>>si.name>>si.eresult>>si.cresult>>si.ganbu>>si.west>>si.lun; si.count=i; if(si.eresult>80&&si.lun>=1) si.money+=8000; if(si.eresult>85&&si.cresult>80) si.money+=4000; if(si.eresult>90) si.money+=2000; if(si.eresult>85&&si.west=='Y') si.money+=1000; if(si.cresult>80&&si.ganbu=='Y') si.money+=850; sum+=si.money; } sort(s+1,s+n+1,cmp); cout<<s[1].name<<endl; cout<<s[1].money<<endl; cout<<sum; }
全服最长!!
-
0
题解(可能有点复杂)
首先定义结构体stu
struct stu { string name; int mark_average,mark_class; char wkr,W_pr;//班干部,西部省份 int art_cnt; int total,id;//总奖学金与输入顺序 } s[101];
然后声明一系列函数判断某学生是否能获得各种奖学金
int YS_Award(stu a)//院士奖 { if(a.mark_average>80 && a.art_cnt >= 1) return 8000; return 0; } int WuSi_Award(stu a)//五四奖 { if(a.mark_average > 85 && a.mark_class > 80) return 4000; return 0; } int GM_Award(stu a)//优秀奖 { if(a.mark_average > 90) return 2000; return 0; } int W_pr_Award(stu a)//西部奖 { if(a.mark_average > 85 && a.W_pr == 'Y') return 1000; return 0; } int GX_Award(stu a)//贡献奖 { if(a.mark_class > 80 && a.wkr == 'Y') return 850; return 0; }
声明排序条件 依题意 奖学金多的在前,奖学金一样的先输入的在前(id小的)
bool cmp(stu x,stu y) { if(x.total == y.total) return x.id < y.id; return x.total > y.total; }
最后在主函数里完成输入处理输出
int main() { //freopen("scholar.in","r",stdin); //freopen("scholar.out","w",stdout); int n; int sum = 0; cin >> n; for(int i = 0; i < n; i++) { cin >> s[i].name >> s[i].mark_average >> s[i].mark_class >> s[i].wkr >> s[i].W_pr >> s[i].art_cnt; s[i].id = i; s[i].total = (YS_Award(s[i]) + WuSi_Award(s[i]) + GM_Award(s[i]) + W_pr_Award(s[i]) + GX_Award(s[i])); sum += s[i].total; } sort(s,s+n,cmp); cout << s[0].name <<endl; cout << s[0].total <<endl; cout << sum << endl; return 0; }
over.
- 1
信息
- ID
- 339
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 7
- 标签
- 递交数
- 1496
- 已通过
- 388
- 上传者