PAT 乙级题目讲解:1016《部分A+B》

发布于:2025-07-20 ⋅ 阅读:(11) ⋅ 点赞:(0)

✅ PAT 乙级题目讲解:1016《部分A+B》

B站讲解视频:火烤小布丁-PAT 乙级题目讲解
讲义 GitHub 地址 持续免费更新中…
祝大家刷题顺利,愉快学算法!有问题建议也欢迎留言~
感谢点赞收藏,欢迎关注支持!

🧩 题目简介

本题考查的是字符串提取 + 数字构造的模拟实现问题。

给定两个正整数 A A A B B B,以及两个数字 D A D_A DA D B D_B DB。我们需要从 A A A 中提取出所有为 D A D_A DA 的数字,并按原顺序拼接成一个新整数 P A P_A PA;同理从 B B B 中提取出所有为 D B D_B DB 的数字,拼接成 P B P_B PB,并输出 P A + P B P_A + P_B PA+PB


🧪 样例分析

输入样例 1:

3862767 6 13530293 3
  • A = 3862767 , D A = 6 A = 3862767, D_A = 6 A=3862767,DA=6 → 提取出数字 6, P A = 66 P_A = 66 PA=66
  • B = 13530293 , D B = 3 B = 13530293, D_B = 3 B=13530293,DB=3 → 提取出数字 3, P B = 33 P_B = 33 PB=33
  • 输出 P A + P B = 66 + 33 = 99 P_A + P_B = 66 + 33 = 99 PA+PB=66+33=99

输出:

99

输入样例 2:

3862767 1 13530293 8
  • A A A 中没有数字 1, P A = 0 P_A = 0 PA=0
  • B B B 中没有数字 8, P B = 0 P_B = 0 PB=0
  • 输出 0 + 0 = 0 0 + 0 = 0 0+0=0

输出:

0

🔍 解题思路

📎 变量说明

变量名 数据类型 含义
a int 输入的整数 A A A
da int 要提取的数字 D A D_A DA
b int 输入的整数 B B B
db int 要提取的数字 D B D_B DB
p int 计算得出的新整数 P A P_A PA P B P_B PB

✅ Step 1:读取输入数据

从输入中读取整数 A A A B B B 以及它们对应的数字 D A D_A DA D B D_B DB

cin >> a >> da >> b >> db;

✅ Step 2:定义函数 p(x, dx) 提取部分数字

定义一个函数 p 来提取给定整数 x x x 中所有为 d x dx dx 的数字,并拼接成一个新整数。

int p(int x, int dx) {
    int px = 0;
    while(x) {
        if(x % 10 == dx) {
            px = px * 10 + dx;
        }
        x /= 10;
    }
    return px;
}
  • 每次从 x x x 中提取最低位数字,如果数字等于 d x dx dx,就拼接到 px 上;
  • 最后返回拼接得到的结果。

✅ Step 3:计算并输出 P A + P B P_A + P_B PA+PB

通过调用 p(a, da)p(b, db) 分别得到 P A P_A PA P B P_B PB,然后输出它们的和。

cout << p(a, da) + p(b, db);

✅ 完整代码

#include <bits/stdc++.h>
using namespace std;

int a, da, b, db;

int p(int x, int dx) {
    int px = 0;
    while(x) {
        if(x % 10 == dx) {
            px = px * 10 + dx;
        }
        x /= 10;
    }
    return px;
}

int main() {
    cin >> a >> da >> b >> db;
    cout << p(a, da) + p(b, db);
}

🚧 常见错误提醒

错误类型 具体表现
字符串提取错误 提取数字时未按正确顺序拼接,导致结果错误
输出格式错误 输出时未按照题目要求格式打印,可能丢失空格或换行

✅ 总结归纳

📌 核心方法总结

通过字符串提取模拟提取数字,使用数位拆分和重组来拼接结果。

📋 技术要点回顾

  • 数位拆分与拼接的标准方法;
  • 数字匹配与提取技巧;
  • 避免溢出的边界条件处理。

📊 复杂度分析

  • 时间复杂度: O ( n ) \mathcal{O}(n) O(n)
  • 空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

其中 n n n 为输入数据中最大数字的位数(最多 9 位)。


🧠 思维拓展

  • 扩展思考:如果题目要求提取数字并按奇偶性筛选拼接,该如何实现?
  • 类似题目:数字构造类问题,如回文数判断、数字逆序等;
  • 其他思路:可将函数 p 中的数位提取改为直接使用字符串操作。

网站公告

今日签到

点亮在社区的每一天
去签到