202603-1 数数
题目描述
给定一个数,如果数中恰好存在3个2,则被称为美丽的数字。
现给定两个数 ,其中 (),请输出它们之间(含端点)存在多少个美丽的数。
输入格式
输入一行两个整数 。
输出格式
输出一个整数,表示 到 之间美丽的数有多少个。
样例输入
2221 2223样例输出
2数据范围
代码解析
这道题是一道典型的数位剥离问题,我们可以用一个循环去遍历 到 之间的所有数,对于每个数,我们用一个循环去遍历它的每一位,统计其中 2 的个数,若个数为 3 则答案加一,注意不要直接用
i去剥离,循环结束后i变成 0,导致死循环。
#include <bits/stdc++.h>using namespace std;int main() {
int a, b, ans = 0; cin >> a >> b; for (int i = a; i <= b; i++) { int cnt = 0; int j = i; while (j != 0) { if (j % 10 == 2) cnt++; j /= 10; } if (cnt == 3) ans++; } cout << ans;
return 0;}202603-2 画画
题目描述
给你一个单整数 ,请输出一个 行 列的方阵。方阵的四个顶点是 +,第一行和第 行的非顶点位置是 -,第 1 列和第 列非顶点位置是 |,中间位置是 *。
输入格式
输入一个单整数 。
输出格式
行 列的方阵。
样例输入
5样例输出
+---+|***||***||***|+---+数据范围
代码解析
一道二级常考的画图问题,注意观察矩形中各种符号的规律即可,第一行和最后一行是
+和-,其他行是|和*,分开处理即可。
#include <bits/stdc++.h>using namespace std;int main() {
int n; cin >> n; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) if (i == 1 || i == n) { if (j == 1 || j == n) cout << '+'; else cout << '-'; } else { if (j == 1 || j == n) cout << '|'; else cout << '*'; } cout << endl; }
return 0;}202606-1 完全平方数计数
题目描述
小杨同学正在研究完全平方数。
平方: 一个数的平方等于这个数乘以这个数本身。
完全平方数: 指可以恰好表示为某个正整数的平方的数。
例如, 是完全平方数,因为 ;但 不是,因为 不能表示为任何正整数的平方。
给定两个正整数 和 (保证 ),小杨同学想知道 到 之间的所有正整数中(包含 和 ),有多少个数是完全平方数。
输入格式
输入两行,第一行为一个正整数 ,第二行为一个正整数 。
输出格式
输出一个非负整数,表示 到 中,有多少个正整数是完全平方数。如果 到 中没有完全平方数,则输出 。
样例输入 1
121样例输出 1
4提示
【样例解释 1】
在 到 中,有以下 个整数是完全平方数: 。
【数据范围】
。
代码解析
这道题和之前考过的题目类似,只需要利用 C++ 整数的特性,先求出 i 的平方根,保存到整数变量,再去求平方看是否等于 i 即可。
#include <bits/stdc++.h>using namespace std;int main() {
int l, r, cnt = 0; cin >> l >> r; for (int i = l; i <= r; i++) { int a = sqrt(i); if (a * a == i) cnt++; } cout << cnt;
return 0;}202606-2 菱形
题目描述
给定正整数 ,在 个网格的画布中,使用字符画一个边长为 个网格的菱形。其中,空白网格使用 表示,菱形边所在的网格用 表示。
例如当 时,图形如下:
..+...+.+.+...+.+.+...+..输入格式
输入一个正整数 ;
输出格式
输出 行,表示按要求画的菱形。
样例输入 1
4样例输出 1
...+.....+.+...+...+.+.....+.+...+...+.+.....+...提示
【数据范围】
。
代码解析
这道题和 2025 年 9 月菱形唯一不同的点,就是输入的 n 代表的含义不同,只需要注意这一点就可以,方法有很多种,这里给出一种上下两部分分开输出的方法。
#include <bits/stdc++.h>using namespace std;int main() {
int n; cin >> n; int m = 2*n-1; // 先画上半部分 for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) if (j == n + (i-1) || j == n - (i-1)) cout << '+'; else cout << '.'; cout << endl; } // 下半部分 i 逆序即可,内层不变 for (int i = n-1; i >=1; i--) { for (int j = 1; j <= m; j++) if (j == n + (i-1) || j == n - (i-1)) cout << '+'; else cout << '.'; cout << endl; }
return 0;}
陕公网安备61010302001363号