奖学金
问题描述
明明所在学校的惯例是在每学期的期末考试之后发放奖学金。
发放的奖学金共有五种,获取的条件各不相同:
1. 院士奖学金:每人8000元,期末平均成绩高于80分,并且在本学期内发表1篇或1篇以上论文的学生均可获得。
2. 五四奖学金:每人4000元,期末平均成绩高于85分,并且班级评议成绩高于80分的学生均可获得。
3. 成绩优秀奖:每人2000元,期末平均成绩高于90分的学生均可获得。
4. 西部奖学金:每人1000元,期末平均成绩高于85分的西部省份学生均可获得。
5. 班级贡献奖:每人850元,班级评议成绩高于80分的学生干部均可获得。
只要符合条件就可以得奖。 每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。
例如明明的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。
由于老师在学期末的时候很忙,所以,他把奖学金统计的事情交给明明做。老师把考试的相关数据给了明明,让他统计出以下数据:
1) 哪位同学获得的奖学金最多;
2) 获得最多奖学金的同学一共获得了多少奖学金;
3) 所有获得奖学金的同学一共获得了多少奖学金;
明明虽然很愿意帮老师这个忙,但是他发现,同学的数量很多,统计起来很麻烦,经常有统计出错的情况发生。于是明明就想请你帮一个忙,帮他写一个统计程序,统计出以上三项内容。
总结
1. 按 5 项奖学金规则逐项判断并累加奖金,同时需统计每组数据的最高奖金学生
2. 用结构体存储学生姓名、成绩、身份标识等信息
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct S {
string n;
int s1, s2;
char l, w;
int p;
int m;
};
int getM(S x) {
int r = 0;
if (x.s1 > 80 && x.p >= 1) r += 8000;
if (x.s1 > 85 && x.s2 > 80) r += 4000;
if (x.s1 > 90) r += 2000;
if (x.s1 > 85 && x.w == 'Y') r += 1000;
if (x.s2 > 80 && x.l == 'Y') r += 850;
return r;
}
int main() {
int N;
vector<vector<S>> g;
vector<int> t;
vector<string> mn;
vector<int> mm;
while (cin >> N) {
vector<S> st(N);
int ta = 0;
string mxn;
int mxm = 0;
for (int i = 0; i < N; ++i) {
cin >> st[i].n >> st[i].s1 >> st[i].s2 >> st[i].l >> st[i].w >> st[i].p;
st[i].m = getM(st[i]);
ta += st[i].m;
if (i == 0 || st[i].m > mxm) {
mxn = st[i].n;
mxm = st[i].m;
}
}
g.push_back(st);
t.push_back(ta);
mn.push_back(mxn);
mm.push_back(mxm);
}
for (int i = 0; i < g.size(); ++i) {
cout << mn[i] << endl;
cout << mm[i] << endl;
cout << t[i] << endl;
if (i != g.size() - 1) cout << endl;
}
return 0;
}
回文数2
问题描述
有一天,明明正在做作业,发现了一组很有趣的数字,例如1、11、313等等。他发现这些数字都是左右对称的,即不论你把这些数字从左读到右还是从右读到左,读出来的数字都是一样的。于是明明就把这个发现告诉了他爸爸。明明的爸爸是一名数学家,对此类型数字早有研究。他对明明说:“这些是回文数,是一种特殊的数字,即这些数字的左右两边是对称的。例如:11左右两边对称,313左右也是对称的。” 明明觉得这很有趣,接着问他爸爸还有什么和这类回文数有关的有趣的东西。明明的爸爸就说:“你把这些回文数转换成二进制数,看看是不是也符合回文数的规则。”明明发现1的二进制数也是1,符合回文数的规则;11的二进制数是1011,不符合回文数的规则;33的回文数是100001,符合回文数的规则。明明就回答爸爸说:“1和33的二进制数符合回文数的规则,11的二进制数则不符合回文数的规则。” 明明爸爸很满意明明的回答,又给了明明很多十进制数,让他判断在这些数中哪些数既是十进制回文数又是二进制回文数。明明起先做起来很有意思,但是时间一长就失去了兴趣。他想请你帮个忙,帮他写一个程序,用来判断一个数,它的十进制数是回文数,且它的二进制数也是回文数。
明明的问题可以归结为:给你一个整数(十进制),判断该整数的十进制数和它的二进制数是否全为回文数。
总结
1. 先将十进制数转为字符串判断回文,再通过除 2 取余法将数转为二进制字符串,同样判断回文,仅当两者均为回文时输出 Yes,否则输出 No
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool isP(string s) {
string t = s;
reverse(t.begin(), t.end());
return s == t;
}
string toBin(int n) {
if (n == 0) return "0";
string s;
while (n > 0) {
s += (n % 2) + '0';
n /= 2;
}
return s;
}
bool check(int n) {
string d = to_string(n);
if (!isP(d)) return false;
string b = toBin(n);
if (!isP(b)) return false;
return true;
}
int main() {
int N;
while (cin >> N) {
if (check(N)) cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}
加法器
问题描述
明明读小学的时候,不喜欢数学,尤其是不喜欢做加法,一做加法就头疼,这样导致明明长大后数学依然不好,而且对数字产生了抵触心理。可是不巧的是,明明进了一家会计公司,每天都要计算很多数据,在这些计算中加法运算居多,而且这些加法不只是是两个数之间的加法,更有多个数的连加。 例如:1+2+3的正确答案是6。 这给明明造成了很大的麻烦。你是明明的好朋友,看到明明如此痛苦,就产生了帮助明明的想法。你想帮明明写一个程序,这个程序能计算一串正整数的连加,从而帮助明明摆脱数字的困扰。 明明的问题可以归结为:给你一串正整数的连加表达式,完成这个表达式的计算。
总结
1. 遍历连加表达式字符串,以加号为分隔符拼接数字子串
2. 遍历结束后处理最后一个数字子串的累加,最终输出表达式总和
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct S {
string n;
int s1, s2;
char l, w;
int p;
int m;
};
int getM(S x) {
int r = 0;
if (x.s1 > 80 && x.p >= 1) r += 8000;
if (x.s1 > 85 && x.s2 > 80) r += 4000;
if (x.s1 > 90) r += 2000;
if (x.s1 > 85 && x.w == 'Y') r += 1000;
if (x.s2 > 80 && x.l == 'Y') r += 850;
return r;
}
int main() {
int N;
vector<vector<S>> g;
vector<int> t;
vector<string> mn;
vector<int> mm;
while (cin >> N) {
vector<S> st(N);
int ta = 0;
string mxn;
int mxm = 0;
for (int i = 0; i < N; ++i) {
cin >> st[i].n >> st[i].s1 >> st[i].s2 >> st[i].l >> st[i].w >> st[i].p;
st[i].m = getM(st[i]);
ta += st[i].m;
if (i == 0 || st[i].m > mxm) {
mxn = st[i].n;
mxm = st[i].m;
}
}
g.push_back(st);
t.push_back(ta);
mn.push_back(mxn);
mm.push_back(mxm);
}
for (int i = 0; i < g.size(); ++i) {
cout << mn[i] << endl;
cout << mm[i] << endl;
cout << t[i] << endl;
if (i != g.size() - 1) cout << endl;
}
return 0;
}
计算机英语翻译
计算机科学家们不断拓展计算机与信息系统的前沿领域:他们开创设计更复杂、可靠且强大的计算机;推动计算机网络高效交换海量信息;探索让计算机展现智能行为的方法。随着计算机日益成为现代社会不可或缺的一部分,计算机科学家们致力于解决新问题,发明更优方法来应对当下的挑战。
计算机科学的目标十分广泛:从探索更有效的方式,帮助人们更好地运用现有计算机,到对未来数十年内未必可行的技术与方法开展极具前瞻性的研究。而支撑这些具体目标的核心动力,是希望通过优化信息的应用,改善人类当下及未来的生存状态。
1. integral:不可或缺的,构成整体所必需的
2. strive:努力,奋斗
3. speculative:推测性的,前瞻性的
4. viable:可行的,能独立发展的
5. underlying:根本的,潜在的
单词打卡


582

被折叠的 条评论
为什么被折叠?



