• [PAT练级笔记] 16 Basic Level 1016


    乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。

    PAT乙级BasicLevelPractice 1016

    问题分析

    题目规定了一个概念: 正整数A的"DA部分", 给定四个正整数, A, DA, B, DB,
    需要输出A的DA部分与B的DB部分的和. 这种给定具体规则/定义/概念的, 将对应规则用变成语言翻译成代码即可.

    正整数A的"DA部分"

    DA是一位整数, 所以根据DA的取值, 可以有正整数A的"0部分", 正整数A的"1部分", …, 正整数A的"9部分"
    正整数A的"DA部分", 即正整数A各个数位值等于DA的部分排列得到的新数值。
    比如"1231234"的"2部分"就是"22", “3部分"就是"33”, “4部分"就是"4”. 其实就是检查A中有多少个DA, 新的数就由多少个DA组成。

    完整描述步骤

    1. 读入数据A、DA、B、DB
      • 因为需要遍历A各个数位上的数字, 所以存储成字符串会便于循环遍历
      • 因为遍历A时需要将各个数位上的数字跟DA对比, 所以DA存储成字符会便于比较
    2. 循环访问A各个数位上的数字, 如果等于DA, 计数器+1
    3. 生成 整数位数等于计数器数值, 且各个数位上的数字都是DA的数, 这个数就是PA
    4. 同理生成PB
    5. 输出PA+PB

    伪代码描述步骤

    1. get input string A, char DA, string B, char B;

    2. set PA = 0; set PB = 0;

    3. for digit in A:

      • if digit == DA: PA = PA * 10 + DA;
    4. for digit in B:

      • if digit == DB: PB = PB * 10 + DB;
    5. print outoput: PA + PB

    完整提交代码

    /*
    # 问题分析
    题目规定了一个概念: 正整数A的"DA部分", 给定四个正整数, A, DA, B, DB, 
    需要输出A的DA部分与B的DB部分的和. 这种给定具体规则/定义/概念的, 将对应规则用变成语言翻译成代码即可.
    
    ## 正整数A的"DA部分"
    
    DA是一位整数, 所以根据DA的取值, 可以有正整数A的"0部分", 正整数A的"1部分", ..., 正整数A的"9部分"
    正整数A的"DA部分", 即正整数A各个数位值等于DA的部分排列得到的新数值。
    比如"1231234"的"2"部分就是"22". 其实就是检查A中有多少个DA, 新的数就由多少个DA组成。
    
    # 完整描述步骤
    1. 读入数据A、DA、B、DB
        - 因为需要遍历A各个数位上的数字, 所以存储成字符串会便于循环遍历
        - 因为遍历A时需要将各个数位上的数字跟DA对比, 所以DA存储成字符会便于比较
    2. 循环访问A各个数位上的数字, 如果等于DA, 计数器+1
    3. 生成 整数位数等于计数器数值, 且各个数位上的数字都是DA的数, 这个数就是PA
    4. 同理生成PB
    5. 输出PA+PB
    
    # 伪代码描述步骤
    1. get input string A, char DA, string B, char B;
    2. set PA = 0; set PB = 0;
    3. for digit in A:
        - if digit == DA: PA = PA * 10 + DA;
    4. for digit in B:
        - if digit == DB: PB = PB * 10 + DB;
        
    5. print outoput: PA + PB
    
    */
    
    # include 
    
    int main(){
        char A[11];
        char B[11];
        int DA;
        int DB;
        
        scanf("%s %d %s %d", A, &DA, B, &DB);
        
        int PA = 0;
        int PB = 0;
        
        int digit;
        for (int i = 0; A[i]; i++){
            digit = (int)A[i] - (int)'0';
            if (digit == DA){
                PA = PA * 10 + digit;
            }
        }
        for (int i = 0; B[i]; i++){
            digit = (int)B[i] - (int)'0';
            if (digit == DB){
                PB = PB * 10 + digit;
            }
        }
        
        printf("%d", PA+PB);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
  • 相关阅读:
    Shell | yum和rpm的使用
    如何去云服务器申请环境跑深度学习模型
    项目解决方案:校园云视频平台方案(视频接入、汇聚、联网、分享)
    地理知识笔记:Haversine距离
    2.21 haas506 2.0开发教程 - _thread - 多线程
    学习大数据开发培训前景如何
    blender怎么设置中文界面
    【T+】畅捷通T+服务管理中,异步任务服务(TPlusPopAsyncTaskService1700)无法启动
    ES6中对象新增了哪些扩展?
    web安全最亲密的战友Burp Suite2--target模块体验
  • 原文地址:https://blog.csdn.net/qq_41785288/article/details/126335421