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
posted @ 2026-03-19 11:43  团爸讲算法  阅读(75)  评论(0)    收藏  举报