GESP认证C++编程真题解析 | 202603 五级
编程题
P15798 有限不循环小数
【题目来源】
洛谷:[P15798 GESP202603 五级] 有限不循环小数 - 洛谷
【题目描述】
若 \(\frac{1}{a}\) 可化为一个有限的,不循环的小数,则称 \(a\) 为终止数。
请你求出在 \(L\) 到 \(R\) 中终止数的数量。
【输入】
输入一行,包含两个整数 \(L,R\)。
【输出】
输出一行,包含一个整数,表示 \(L\) 到 \(R\) 中终止数的数量。
【输入样例】
2 11
【输出样例】
5
【算法标签】
《洛谷 P15798 优先不循环小数》 #数论# #GESP# #2026#
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int l, r, ans;
// 检查一个数是否只包含质因子 2 和 5
bool check(int x)
{
// 不断除以 2
while (x % 2 == 0)
{
x /= 2;
}
// 不断除以 5
while (x % 5 == 0)
{
x /= 5;
}
// 如果最终结果为 1,说明 x 只包含质因子 2 和 5
return x == 1;
}
int main()
{
cin >> l >> r;
// 遍历区间 [l, r] 中的每个数
for (int i = l; i <= r; i++)
{
if (check(i))
{
ans++;
}
}
cout << ans << endl;
return 0;
}
【运行结果】
2 11
5
P15799 找数
【题目来源】
洛谷:[P15799 GESP202603 五级] 找数 - 洛谷
【题目描述】
给定一个包含 \(n\) 个互不相同的正整数的数组 \(A\) 与一个包含 \(m\) 个互不相同的正整数的数组 \(B\),请你帮忙计算有多少个数在数组 \(A\) 与数组 \(B\) 中均出现。
【输入】
第一行包含两个整数 \(n,m\)。
第二行包含 \(n\) 个正整数 \(a_1,a_2,\cdots,a_n\) 表示数组 \(A\)。
第三行包含 \(m\) 个正整数 \(b_1,b_2,\cdots,b_m\) 表示数组 \(B\)。
【输出】
输出一个整数,表示在数组 \(A\) 与数组 \(B\) 中均出现的数的个数。
【输入样例】
3 5
4 2 3
3 1 5 4 6
【输出样例】
2
【算法标签】
《洛谷 P15799 找数》 #二分# #离散化# #bitset# #哈希表# #STL# #GESP# #2026#
【代码详解】
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n, m;
int ans;
// 使用 map 记录每个数字出现的次数
map<int, int> mp;
int main()
{
cin >> n >> m;
// 读入第一个集合的元素
for (int i = 1; i <= n; i++)
{
int x;
cin >> x;
// 记录第一个集合中数字的出现次数
mp[x]++;
}
// 读入第二个集合的元素
for (int i = 1; i <= m; i++)
{
int x;
cin >> x;
// 记录第二个集合中数字的出现次数
mp[x]++;
}
// 遍历 map
for (auto x : mp)
{
// 如果某个数字出现了两次,说明在两个集合中都出现过
if (x.second == 2)
{
ans++;
}
}
// 输出交集的大小
cout << ans << endl;
return 0;
}
【运行结果】
3 5
4 2 3
3 1 5 4 6
2
浙公网安备 33010602011771号