[code] PTA 胡凡算法笔记 DAY023

题目 A1084

在这里插入图片描述

  • 题意
    根据输入的两个字符串判断输出坏掉的键,不用重复输出,字母用大写输出。

  • 思路
    用原始串扫描输出串,不相同的字符即为坏掉的键,输出时需判断之前是否已记录过,这里我采取map的方法做映射。
    注意:可能扫描完了输出串,原始串后部分还未判断。

  • Code in C++

#include <cctype>
#include <cstdio>
#include <map>
#define maxn 85
int main()
{
    char origin[maxn], out[maxn];
    scanf("%s", origin);
    scanf("%s", out);
    std::map<char, int> worn;
    int i, j;
    for (i = 0, j = 0; origin[i] != '\0' && out[j] != '\0'; ++i) {
        if (origin[i] != out[j]) {
            char tmp = origin[i];
            if (isalpha(tmp)) {
                tmp = toupper (tmp);
            }
            if (worn.count(tmp)== 0) {
                printf("%c", tmp);
                worn[tmp] = 1;
            }
        } else {
            ++j;
        }
    }

    // 判断原串最后一位
    for (; origin[i] != '\0'; ++i) {
        char tmp = origin[i];
        if (isalpha(tmp)) {
            tmp = toupper (tmp);
        }
        if (worn.count(tmp)== 0) {
            printf("%c", tmp);
            worn[tmp] = 1;
        }
    }
    return 0;
}


题目 B1033 旧键盘打字

在这里插入图片描述

  • 题意
    给出坏掉的键和原始串,输出显示的串。

  • 思路
    这里其实主要就是记住坏掉的键和关于大写字母输出的逻辑即可。坏掉键中的大写字母都换为小写字母(不换将输入串的小写变大写再判断也可以)。
    注意:坏掉的键可能输入很长也可能为空,也需要用长串变量接收,采取getline方式。最后需要输出空行。

  • Code in C++

#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
bool hashTable[256];
std::string str;
int main()
{
    memset(hashTable, true, sizeof(hashTable));
    getline(std::cin, str);
    for (int i = 0; i < str.size(); ++i) {
        if (str[i] >= 'A' && str[i] <= 'Z')
            str[i] = str[i] - 'A' + 'a';
        hashTable[str[i]] = false;
    }
    getline(std::cin, str);
    for (int i = 0; i < str.size(); ++i) {
        if (str[i] >= 'A' && str[i] <= 'Z') {
            char tmp = str[i] - 'A' + 'a';
            if (hashTable[tmp] == true && hashTable['+'] == true ) {
                printf("%c", str[i]);
            }
        } else if (hashTable[str[i]] == true){
                printf("%c", str[i]);
        }
    }
    printf("\n");
    return 0;
}


小结

字符串的输入方式还是没有掌握地很好。然后就是题目中的一些细节没有掌握还有一些逻辑写错了地方导致debug了很久。

这是一本零基础就能读懂的算法书籍,读者不需要因为自己没有语言基础而畏惧。书籍的第2章便是一个C语言的入门教程,内容非常易懂,并且十分实用,阅读完这章就可以对本书需要的C语言基础有一个较好的掌握。本书已经覆盖了大部分基础经典算法,不仅可以作为考研机试和PAT的学习教材,对其他的一些算法考试(例如CCF的CSP考试)或者考研初试的数据结构科目的学习和理解也很有帮助,甚至仅仅想学习经典算法的读者也能从本书中学到许多知识,本书还有配套的《算法笔记上机训练实战指南》本书的作者是同样经历过考研机试和各类算法考试的专家型学长,知晓这类考试中的痛点,以及考生在学习算法时容易产生困惑的地方,因此可以把本书看作是学长为你奉献的满满的经验干货,这是最有价值的东西。本书的最个试印版本献给了浙大考研学子,并令当年的浙大考研机试平均分增加了十多分,收获了考生的大量好评。但作者并没有止步于此,经过了半年多时间的内容完善和补充之后,新的版本在新一年的考研机试中再次获得了考生的一致赞美。最后,在经过精心整理之后,书籍终于定稿,并编撰成书。我们知道,纸质书籍的一个弱点就在于不能像软件一样随时更新内容,但本书采用了与二维码相结合的方式,使得本书变为能够随时更新内容的书籍,读者也可以随时从二 维码中找到勘误。这种作者和读者能够相互沟通的方式让书籍变“活”了,也能够帮助提升读者对知识的理解。 本书内容包括:C/C++快速入门、入门模拟、算法初步、数学问题、C++标准模板库(STL)、数据结构专题(两章)、搜索专题、图算法专题、动态规划专题、字符串专题、专题扩展。书中每小节的末尾均印有二维码,用以实时更新或补充书籍的内容及发布本书的勘误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值