[code] PTA 胡凡算法笔记 DAY015

本文详细解析了两个算法题目:一是数字加密,通过13进制的按位计算实现字符串加密;二是数位相加,将输入数字的各数位相加并按位读出结果。文章提供了C++代码实现,并分享了使用map数据结构的心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目 B1048 数字加密

在这里插入图片描述

  • 题意
    按规则按位进行计算。

  • 思路
    首先是从后往前处理字符串,这里奇偶位的判断会变化。其次,需要注意字符串里面存的是字符在进行数学运算的时候需要减去·‘0’。再次,还需要注意的一点就是两个位数不一致的时候也需要按规则进行运算,不足的另一个需要补0。这里13进制我还是采用数组去存储。

  • Code in C++

#include <iostream>
#include <string>

char radix[13] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'J', 'Q', 'K'};

int main()
{
    std::string A, B, ans;
    std::cin >> A >> B;

    int alenth = A.size();
    int blenth = B.size();
    int lenth = alenth > blenth ? alenth : blenth;
    for (int i = 0; i < lenth; ++i) {
        int tempA = i < alenth ? A[alenth - 1 - i] - '0': 0;
        int tempB = i < blenth ? B[blenth - 1 - i] - '0': 0;
        if (i % 2 == 0) {
            ans.insert(0, 1, radix[(tempA + tempB)% 13]);
        } else {
            if (tempB >= tempA) {
                tempB -= tempA;
            } else {
                tempB = tempB + 10 - tempA;
            }
            ans.insert(0, 1, tempB + '0');
        }
    }
    std::cout << ans;
    return 0;
}


题目 A1005

在这里插入图片描述

  • 题意
    将输入数各位相加,然后按位读出相加和。

  • 思路
    就是简单的将各位加起来然后再进行映射数字的读法。可能需要注意的就是数字的顺序问题,单词的拼写问题。

  • Code in C++

#include <iostream>
#include <string>
#include <map>

std::map<char, std::string> digits = {{'0', "zero"},
                                      {'1', "one"},
                                      {'2', "two"},
                                      {'3', "three"},
                                      {'4', "four"},
                                      {'5', "five"},
                                      {'6', "six"},
                                      {'7', "seven"},
                                      {'8', "eight"},
                                      {'9', "nine"}};

int main()
{
    std::string N;
    std::cin >> N;
    int sum = 0;
    for (int i = 0; i < N.size(); ++i) {
        sum += (N[i] - '0');
    }

    std::string ans = std::to_string(sum);
    std::cout << digits[ans[0]];
    for (int i = 1; i < ans.size(); ++i) {
        std::cout << " " << digits[ans[i]];
    }
    return 0;
}


小结

map定义初始化时里面键值对是用大括号{}

PS:今天看到知乎有个leetcode提交记录的界面,羡慕。又是想弃PTA的一天。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值