题号 | 题目 |
---|---|
Problem A | A + B Problem |
Problem B | 求绝对值 |
Problem C | 成绩转换 |
Problem D | 水仙花数 |
Problem E | 数据的交换输出 |
Problem F | 字符串统计 |
Problem G | 多项式求和 |
Problem H | 求数列的和 |
Problem I | 折线分割平面 |
Problem J | Choosing Teams |
本题解采用 C++ ,大概思路与 C 一样
cin 对应 scanf
cout 对应 printf
如果还有问题群里问即可,有余力的同学可以看群公告里上一次比赛
那一套题更难,群文件有上次的题解
A + B Problem
计算 A + B
多组数据,以 EOF 结尾
/* By:OhYee Github:OhYee Blog:http://www.oyohyee.com/ Email:oyohyee@oyohyee.com かしこいかわいい? エリーチカ! 要写出来Хорошо的代码哦~ */ #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <iomanip> #include <iostream> #include <sstream> #include <map> #include <set> #include <list> #include <queue> #include <stack> #include <string> #include <vector> #include <bitset> #include <functional> using namespace std; typedef long long LL; const int maxn = 105; const int INF = 0x7FFFFFFF; const double eps = 1e-10; bool Do() { int a,b; if(cin >> a >> b) { cout << a + b << endl; return true; } else { return false; } } int main() { cin.tie(0); cin.sync_with_stdio(false); while(Do()); return 0; }
求绝对值
求一个实数的绝对值
使用 cmath
头文件(math.h
)里的 fabs()
函数
输出记得保留小数
/* By:OhYee Github:OhYee Blog:http://www.oyohyee.com/ Email:oyohyee@oyohyee.com かしこいかわいい? エリーチカ! 要写出来Хорошо的代码哦~ */ #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <iomanip> #include <iostream> #include <sstream> #include <map> #include <set> #include <list> #include <queue> #include <stack> #include <string> #include <vector> #include <bitset> #include <functional> using namespace std; typedef long long LL; const int maxn = 105; const int INF = 0x7FFFFFFF; const double eps = 1e-10; bool Do() { double a; if(cin >> a) { cout <<fixed<<setprecision(2)<< fabs(a) << endl; return true; } else { return false; } } int main() { cin.tie(0); cin.sync_with_stdio(false); while(Do()); return 0; }
成绩转换
针对不同的输入,有不同的输出
/* By:OhYee Github:OhYee Blog:http://www.oyohyee.com/ Email:oyohyee@oyohyee.com かしこいかわいい? エリーチカ! 要写出来Хорошо的代码哦~ */ #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <iomanip> #include <iostream> #include <sstream> #include <map> #include <set> #include <list> #include <queue> #include <stack> #include <string> #include <vector> #include <bitset> #include <functional> using namespace std; typedef long long LL; const int maxn = 105; const int INF = 0x7FFFFFFF; const double eps = 1e-10; inline bool compare(int n,int a,int b) { return n >= a&&n <= b; } bool Do() { int a; if(cin >> a) { if(compare(a,0,59)) cout << "E" << endl; else if(compare(a,60,69)) cout << "D" << endl; else if(compare(a,70,79)) cout << "C" << endl; else if(compare(a,80,89)) cout << "B" << endl; else if(compare(a,90,100)) cout << "A" << endl; else cout << "Score is error!" << endl; return true; } else { return false; } } int main() { cin.tie(0); cin.sync_with_stdio(false); while(Do()); return 0; }
水仙花数
先写一个函数判断一个数是不是水仙花数
模拟定义即可
可以先把所有数筛选一遍,打个表,可以节省时间
输出的时候记得输出空格,并且只有两个数字中间有,最后不要有多余的
/* By:OhYee Github:OhYee Blog:http://www.oyohyee.com/ Email:oyohyee@oyohyee.com かしこいかわいい? エリーチカ! 要写出来Хорошо的代码哦~ */ #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <iomanip> #include <iostream> #include <sstream> #include <map> #include <set> #include <list> #include <queue> #include <stack> #include <string> #include <vector> #include <bitset> #include <functional> using namespace std; typedef long long LL; const int maxn = 105; const int INF = 0x7FFFFFFF; const double eps = 1e-10; bool sxh[1005]; inline int Cube(int a) { return a*a*a; } inline bool issxh(int n) { int m = n; int sum = 0; while(m) { sum += Cube(m % 10); m /= 10; } return sum == n; } bool Do() { int a,b; if(!(cin >> a >> b)) return false; int has = false; for(int i = a;i <= b;i++) { if(sxh[i]) { if(has) cout << " "; cout << i; has = true; } } if(!has) cout << "no"; cout << endl; return true; } int main() { cin.tie(0); cin.sync_with_stdio(false); for(int i = 100;i <= 999;i++) sxh[i] = issxh(i); while(Do()); return 0; }
数据的交换输出
遍历所有数,找到最小数的位置,交换它和第一个
/* By:OhYee Github:OhYee Blog:http://www.oyohyee.com/ Email:oyohyee@oyohyee.com かしこいかわいい? エリーチカ! 要写出来Хорошо的代码哦~ */ #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <iomanip> #include <iostream> #include <sstream> #include <map> #include <set> #include <list> #include <queue> #include <stack> #include <string> #include <vector> #include <bitset> #include <functional> using namespace std; typedef long long LL; const int INF = 0x7FFFFFFF; const double eps = 1e-10; const int maxn = 105; int a[maxn]; bool Do() { int n; cin >> n; if(n==0) return false; int pos = 0; for(int i = 0;i < n;i++) { cin >> a[i]; if(a[i] < a[pos]) pos = i; } int t = a[pos]; a[pos] = a[0]; a[0] = t; for(int i = 0;i < n;i++) { if(i) cout << " "; cout << a[i]; } cout << endl; return true; } int main() { cin.tie(0); cin.sync_with_stdio(false); while(Do()); return 0; }
字符串统计
遍历一行字符,统计数字的个数
By:OhYee Github:OhYee Blog:http://www.oyohyee.com/ Email:oyohyee@oyohyee.com かしこいかわいい? エリーチカ! 要写出来Хорошо的代码哦~ */ #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <iomanip> #include <iostream> #include <sstream> #include <map> #include <set> #include <list> #include <queue> #include <stack> #include <string> #include <vector> #include <bitset> #include <functional> using namespace std; typedef long long LL; const int INF = 0x7FFFFFFF; const double eps = 1e-10; string s; bool Do() { cin >> s; int cnt = 0; for(size_t i = 0;i < s.size();i++) { if(s[i] >= '0' && s[i] <= '9') cnt++; } cout << cnt << endl; return true; } int main() { cin.tie(0); cin.sync_with_stdio(false); int T; cin >> T; while(T--) { Do(); }; return 0; }
多项式求和
计算多项式
可以先计算好所有的结果,然后查表输出
需要使用 double
/* By:OhYee Github:OhYee Blog:http://www.oyohyee.com/ Email:oyohyee@oyohyee.com かしこいかわいい? エリーチカ! 要写出来Хорошо的代码哦~ */ #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <iomanip> #include <iostream> #include <sstream> #include <map> #include <set> #include <list> #include <queue> #include <stack> #include <string> #include <vector> #include <bitset> #include <functional> using namespace std; typedef long long LL; const int INF = 0x7FFFFFFF; const double eps = 1e-10; const int maxn = 1005; double ans[maxn]; bool Do() { int n; cin >> n; cout << ans[n] << endl; return true; } int main() { cin.tie(0); cin.sync_with_stdio(false); cout << fixed << setprecision(2); ans[0] = 0; for(int i = 1;i <= 1000;i++) { ans[i] = ans[i - 1] + ((double)1 / i) * ((i % 2) ? 1 : -1); } int T; cin >> T; while(T--) { Do(); }; return 0; }
求数列的和
使用 cmath
头文件(math.h
)的 sqrt()
函数
/* By:OhYee Github:OhYee Blog:http://www.oyohyee.com/ Email:oyohyee@oyohyee.com かしこいかわいい? エリーチカ! 要写出来Хорошо的代码哦~ */ #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <iomanip> #include <iostream> #include <sstream> #include <map> #include <set> #include <list> #include <queue> #include <stack> #include <string> #include <vector> #include <bitset> #include <functional> using namespace std; typedef long long LL; const int INF = 0x7FFFFFFF; const double eps = 1e-10; const int maxm = 1005; bool Do() { double n,m; if(!(cin >> n>>m)) return false; double ans = 0; while(m--) { ans += n; n = sqrt(n); } cout << ans << endl; return true; } int main() { cin.tie(0); cin.sync_with_stdio(false); cout << fixed << setprecision(2); while(Do()); return 0; }
折线分割平面
可推出公式:2n2 - n + 1
/* By:OhYee Github:OhYee Blog:http://www.oyohyee.com/ Email:oyohyee@oyohyee.com かしこいかわいい? エリーチカ! 要写出来Хорошо的代码哦~ */ #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <iomanip> #include <iostream> #include <sstream> #include <map> #include <set> #include <list> #include <queue> #include <stack> #include <string> #include <vector> #include <bitset> #include <functional> using namespace std; typedef long long LL; const int INF = 0x7FFFFFFF; const double eps = 1e-10; bool Do() { int n; cin >> n; cout << 2 * n*n - n + 1 << endl; return true; } int main() { cin.tie(0); cin.sync_with_stdio(false); cout << fixed << setprecision(2); int T; cin >> T; while(T--) Do(); return 0; }
Choosing Teams
给出 n 个人参加过比赛的次数,需要组参加 k 场比赛的 3 人队伍,每个人最多只能参加 5 次比赛
求能组的最多队伍数量
求大于等于 5-k 的人的数量,然后除以 3 即可
/* By:OhYee Github:OhYee Blog:http://www.oyohyee.com/ Email:oyohyee@oyohyee.com かしこいかわいい? エリーチカ! 要写出来Хорошо的代码哦~ */ #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <iomanip> #include <iostream> #include <sstream> #include <map> #include <set> #include <list> #include <queue> #include <stack> #include <string> #include <vector> #include <bitset> #include <functional> using namespace std; typedef long long LL; const int INF = 0x7FFFFFFF; const double eps = 1e-10; bool Do() { int n,k; if(!(cin >> n>>k)) return false; int ans = 0; for(int i = 0;i < n;i++) { int t; cin >> t; if(t + k <= 5) ans++; } cout << ans / 3 << endl; return true; } int main() { cin.tie(0); cin.sync_with_stdio(false); while(Do()); return 0; }