48天笔试强训——第18天

115 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情


选择题

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

编程题

统计每个月兔子的总数

本题的主要问题是控制好新生兔子的数量,一个兔子经过2个月就可以生小兔子,所以我们要记录成年兔子的个数(可以生小兔子的),1个月的兔子,2个月的兔子。兔子的总和就是把成年兔子,1个月的兔子,2个月的兔子的总和。

字符串通配符

这一题类似字符串的匹配,如何使通配符的字符串(tpf)和需要匹配的字符串匹配(str)呢? 当然题目中的匹配规则都和我们说了,我们从tpf串的第一个字符和str的第一个字符进行匹配,匹配的规则:如果都转换成小写还是相等的,那么,从都从下一个字符开始匹配,如果tpf是?,那么str需要是满足要求的字符,如果满足要求,那么继续匹配,否则匹配失败;如果tpf是*,需要分几种情况:1.str是满足条件的字符,我们要包tpf不匹配,匹配一个字符,匹配多个字符的结果||;2.str不满足字符串的匹配规则,tpf不匹配,向后移动一位。按上述规则,两个字符串都能完全的匹配就返回true,否则出现一种不符合的就返回false。

#include <iostream>
#include <string>
using namespace std;
bool f(const char* tpf,const char* str)
{
    if(*tpf=='\0'&&*str=='\0')
    return true;
    else if(*tpf=='\0'||*str=='\0')
    return false;
    else if(*tpf=='?'&&isalnum(*str))
    return f(tpf+1,str+1);
    else if(*tpf=='*')
    {
        while(*tpf=='*')
        tpf++;
        tpf--;
        if(isalnum(*str))
        return f(tpf+1,str)||f(tpf+1,str+1)||f(tpf,str+1);
        else
        return f(tpf+1,str);
    }
    
    else if(toupper(*tpf)==toupper(*str))
    return f(tpf+1,str+1);
    else
    return false;
}
int main() {
    string tpf,str;
    cin>>tpf>>str;
    if(f(tpf.c_str(),str.c_str()))
    cout<<"true"<<endl;
    else
    cout<<"false"<<endl;
    return 0;
}