当前位置:首页>java>【第35期】21天养成编程习惯:C++刷题第19天

【第35期】21天养成编程习惯:C++刷题第19天

  • 2026-10-21 13:27:29
【第35期】21天养成编程习惯:C++刷题第19天

跟老马一起“升级打怪”学编程!

  • 涉及考试:计算机学会编程能力等级认证(GESP)
  • 活动内容:提供不同等级的真题供小朋友们选择练习
  • 备考建议:根据自己备考的等级选择相应题目
  • 附加价值:可作为白名单比赛的备考训练
  • 本月打卡:本月打卡题目

Day19:Openjudge1.4.18_点和正方形的关系

【提交】

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;}

Day19:GESP二级2025.09_优美的数字

【提交】

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;}

Day19:Openjudge1.6.03_计算书费

【提交】

http://noi.openjudge.cn/ch0106/03/

【描述】

下面是一个图书的单价表:

  • 计算概论 28.9 元/本
  • 数据结构与算法 32.7 元/本
  • 数字逻辑 45.6元/本
  • C++程序设计教程 78 元/本
  • 人工智能 35 元/本
  • 计算机体系结构 86.2 元/本
  • 编译原理 27.8元/本
  • 操作系统 43 元/本
  • 计算机网络 56 元/本
  • JAVA程序设计 65 元/本

给定每种图书购买的数量,编程计算应付的总费用。

【输入】

输入一行,包含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;}

Day19:Openjudge1.8.03_计算矩阵边缘元素之和

【提交】

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;}

Day19:GESP五级2023.09_因数分解

【提交】

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;}

Day19:GESP六级2023.12_闯关游戏

【提交】

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天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。

最新文章

随机文章