涉及考试:计算机学会编程能力等级认证(GESP) 活动内容:提供不同等级的真题供小朋友们选择练习 备考建议:根据自己备考的等级选择相应题目 附加价值:可作为白名单比赛的备考训练 本月打卡:本月打卡题目
【提交】
http://noi.openjudge.cn/ch0104/18/
【描述】
有一个正方形,四个角的坐标分别是,,,,是横轴,是纵轴。写一个程序,判断一个给定的点是否在这个正方形内(包括正方形边界)。
【输入】
输入一行,包括两个整数 、,以一个空格分开,表示坐标。
【输出】
输出一行,如果点在正方形内,则输出yes,否则输出no。
【样例输入】
1 1【样例输出】
yes【参考程序】
C语言版本
/** 18:点和正方形的关系* http://noi.openjudge.cn/ch0104/18/*/# include<cstdio>intmain(){int x, y;scanf("%d%d", &x, &y);if (x >= -1 && x <= 1 && y >= -1 && y <= 1) {printf("yes"); }else {printf("no"); }return 0;}C++版本
/** 18:点和正方形的关系* http://noi.openjudge.cn/ch0104/18/*/#include<iostream>#include<iomanip>using namespace std;intmain(){int x, y;cin >> x >> y;if (x >= -1 && x <= 1 && y >= -1 && y <= 1) {cout << "yes"; }else {cout << "no"; }return 0;}【提交】
https://www.luogu.com.cn/problem/B4411
【问题描述】
如果一个正整数在十进制下的所有数位都相同,小 A 就会觉得这个正整数很优美。例如,正整数 的数位都是 ,所以 是优美的。正整数 的数位都是 ,所以 是优美的。正整数 的数位不都相同,所以 并不优美。
小 A 想知道不超过 的正整数中有多少优美的数字。你能帮他数一数吗?
【输入描述】
一行,一个正整数 。
【输出描述】
一行,一个正整数,表示不超过 的优美正整数的数量。
【样例输入1】
6【样例输出1】
6【样例输入2】
2025【样例输出2】
28【数据范围】
对于所有测试点,保证 。
参考答案:
/** [GESP202509 二级] 优美的数字* https://www.luogu.com.cn/problem/B4411*/#include<iostream>using namespace std;intmain(){int n,cnt=0;cin >> n;for (int i = 1; i <= n; i++) {int r = i % 10;int k = i / 10;while (k > 0) {if (k % 10 != r) {break; } k = k / 10; }if (k == 0) { cnt += 1; } }cout << cnt << endl;return 0;}【提交】
http://noi.openjudge.cn/ch0106/03/
【描述】
下面是一个图书的单价表:
给定每种图书购买的数量,编程计算应付的总费用。
【输入】
输入一行,包含10个整数(大于等于0,小于等于100),分别表示购买的《计算概论》、《数据结构与算法》、《数字逻辑》、《C++程序设计教程》、《人工智能》、《计算机体系结构》、《编译原理》、《操作系统》、《计算机网络》、《JAVA程序设计》的数量(以本为单位)。每两个整数用一个空格分开。
【输出】
输出一行,包含一个浮点数f,表示应付的总费用。精确到小数点后一位。
【样例输入】
1 5 8 10 5 1 1 2 3 4【样例输出】
2140.2【参考程序】
C语言版本
# include<cstdio>intmain(){double price[10] = { 28.9,32.7,45.6,78,35,86.2,27.8,43,56,65 };double total = 0;int n;for (int i = 0; i < 10; i++) {scanf("%d", &n); total += n * price[i]; }printf("%.1lf", total);return0;}C++版本
# include<iostream># include<iomanip>using namespace std;intmain(){double price[10] = { 28.9,32.7,45.6,78,35,86.2,27.8,43,56,65 };double total = 0;int n;for (int i = 0; i < 10; i++) {cin >> n; total += n * price[i]; }cout << fixed << setprecision(1) << total;return 0;}【提交】
http://noi.openjudge.cn/ch0108/03/
【描述】
输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。
【输入】
第一行分别为矩阵的行数和列数,两者之间以一个空格分开。
接下来输入的行数据中,每行包含个整数,整数之间以一个空格分开。
【输出】
输出对应矩阵的边缘元素和
【样例输入】
3 33 4 13 7 12 0 1【样例输出】
15【参考程序】
C++版本
/** 03:计算矩阵边缘元素之和* http://noi.openjudge.cn/ch0108/03/*/#include<iostream>using namespace std;intmain(){int m, n;int sum = 0;int num[100][100];cin >> m >> n;for (int i = 0;i < m;i++) {for (int j = 0;j < n;j++) {cin >> num[i][j];if (i == 0 || j == 0 || i == (m - 1) || j == (n - 1)) { sum += num[i][j]; } } }cout << sum << endl;return 0;}【提交】
https://www.luogu.com.cn/problem/B3871
【问题描述】
每个正整数都可以分解成素数的乘积,例如:、。
现在,给定一个正整数 ,请按要求输出它的因数分解式。
【输入描述】
输入第一行,包含一个正整数 。约定
【输出描述】
输出一行,为 的因数分解式。要求按质因数由小到大排列,乘号用星号*表示,且左右各空一格。当且仅当一个素数出现多次时,将它们合并为指数形式,用上箭头^表示,且左右不空格。
【样例输入1】
6【样例输出1】
2 * 3【样例输入2】
20【样例输出2】
2^2 * 5【样例输入3】
23【样例输出3】
23参考答案:
/** [GESP202309 五级] 因数分解* https://www.luogu.com.cn/problem/B3871*/# include<iostream># include<vector>using namespace std;intmain(){long long N;cin >> N;bool first = true;for (long long p = 2;p * p <= N;p++) {if (N % p != 0)continue;int cnt = 0;while (N % p == 0) { cnt += 1; N /= p; }if (first) { first = false; }else {cout << " * "; }cout << p;if (cnt > 1) {cout << "^" << cnt; } }if (N > 1) {if (first) { first = false; }else {cout << " * "; }cout << N; }return 0;}【提交】
https://www.luogu.com.cn/problem/P10108
【问题描述】
你来到了一个闯关游戏。
这个游戏总共有 关,每关都有 个通道,你需要选择一个通道并通往后续关卡。其中,第 个通道可以让你前进 关,也就是说,如果你现在在第 关,那么选择第 个通道后,你将直接来到第 关(特别地,如果 ,那么你就通关了)。此外,当你顺利离开第 关时,你还将获得 分。
游戏开始时,你在第 关。请问,你通关时最多能获得多少总分。
【输入描述】
第一行两个整数 ,,分别表示关卡数量和每关的通道数量。
接下来一行 个用单个空格隔开的整数 。保证 。
接下来一行 个用单个空格隔开的整数 。保证 。
【输出描述】
一行一个整数,表示你通关时最多能够获得的分数。
【样例输入1】
6 2 2 31 0 30 100 30 30【样例输出1】
131【样例解释1】
你可以在第 关选择第 个通道,获得 分并来到第 关;随后再选择第 个通道,获得 分并来到第 关;最后任选一个通道,都可以获得 分并通关。如此,总得分为 。
【样例输入2】
6 22 31 0 30 100 30 -1【样例输出2】
101【样例解释2】
请注意,一些关卡的得分可能是负数。
【数据范围】
对于 的测试点,保证 。
对于 的测试点,保证 ;保证 。
对于所有测试点,保证 ;保证 。
参考答案:
/** [GESP202312 六级] 闯关游戏* https://www.luogu.com.cn/problem/P11960*/# include<iostream># include<algorithm># include<vector># include<climits>using namespace std;const int N = 1e4 + 5;const int M = 100 + 5;int n, m, maxs = 0,ans = INT_MIN;vector<int> a(M); // 每个通道前进的关数vector<int> b(N); //离开每一关的得分vector<int> dp(N, INT_MIN);intmain(){cin >> n >> m;for (int i = 1;i <= m;i++) {cin >> a[i]; maxs = max(maxs, a[i]); }for (int i = 1;i <= n;i++) {cin >> b[i]; } dp[1] = b[1]; for (int i = 1;i <= n;i++) {for (int j = 1;j <= m;j++) {if (i - a[j] > 0) { dp[i] = max(dp[i], dp[i - a[j]] + b[i]); } } }for (int i = n - maxs + 1;i <= n;i++) ans = max(ans, dp[i]);cout << ans;return 0;}青少年编程竞赛交流
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。
