3.21 贝壳C++研发工程师 笔试题答案

3.21 贝壳C++研发工程师 笔试题答案

第一题:s字符串,划分为几个连续的字符数组,字符为偶数个的时候,val+1,字符为奇数个的时候,val-1,最后输出最大的val。
emmm,听大佬说第一题用动态规划的方法,具体还没想清楚,欢迎大佬们在评论里解答,谢谢!

第二题:判断[l,r]中间的自余数的个数。
思路:采用打表的方法,提前存储1~1e6的自余数。
代码:
#include <bits/stdc++.h>
using namespace std;
int a[27455];//27455是1~1e6的自余数的个数
int main ()
{
    int t;
    int l,r;
    cin>>t;
    int j = 0;
    for(int i=1; i<=1000000; i++) //打表
    {
        int tmp = i;
        int zhi;
        long long sum = 0;
        while(tmp > 0)
        {
            zhi = tmp % 10;
            sum += zhi;
            tmp /= 10;
        }
        if(i % sum == 1)
        {
            a[j++] = i;
        }
    }
    for(int i=1;i<20;i++)
        cout<<a[i]<<" ";

    while(t--) // 1000
    {
        cin>>l>>r;
        int left = 0,right = 0;
        int ans = 0;
        for(int i=0; i<27455; i++)
        {
            if(a[i] <= l)
            {
                left = i;
            }
            if(a[i]<= r)
            {
                right = i;
            }
        }
        ans = right - left + 1;
        //for(int i=0;i<j;i++)
        //cout<<a[i]<<" ";
        //cout<<j<<endl;
        cout<<ans<<endl;
    }
    return 0;
}
/*
3
11 11
13 13
1 20
*/
第三题:字符匹配,在一个n*n的字符矩阵从上往下或者从左往后找到与字符串s匹配的字符串的个数。
思路:暴力的方法,先寻找从左往右匹配的字符个数,再寻找从上往下匹配的个数。
代码:
#include <bits/stdc++.h>
using namespace std;

char a[110][110];
int main ()
{
    int n;
    cin >>n;
    string s;
    cin>>s;
    int str = s.size();
    //getchar();
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
        {
            cin>>a[i][j];
        }
    }
    long long ans = 0;

    string tmp;
    for(int i=0; i<=n-1; i++)
    {
        for(int j=0; j<=n-str; j++)
        {
            //if(a[i][j] == s[k])
            for(int k=0; k<str; k++)
            {
                tmp += a[i][j+k];//从左往右
            }
            if(tmp == s)
            {

                ans++;
            }
            tmp = "";
        }
    }

    tmp = "";
    for(int j=0; j<=n-1; j++)
    {
        for(int i=0; i<=n-str; i++)
        {
            for(int k=0; k<str; k++)
            {
                tmp += a[i+k][j];//从上往下
            }
            if(tmp == s)
            {
                ans++;
            }
            tmp = "";
        }
    }
    cout<<ans<<endl;
    return 0;
}
/*
3
abc
xax
abc
xcx

*/
#笔试题目##贝壳找房#
全部评论
我第二题也想到打表了,但是突然没想到好方法从表中获取到左边界和右边界,第一反应是二分查找,但是没时间写了
点赞 回复 分享
发布于 2022-03-21 22:15
第二题,可以在输入的时候维护一个最大最小值,这样就有明确的打表区间了
点赞 回复 分享
发布于 2022-03-21 23:00
第三题暴力解没过,不知道为什么,纯无语
点赞 回复 分享
发布于 2022-03-21 23:05

相关推荐

从24年初开学开始接触到前端,和实验室几个同学一起学习,可似乎我总比他们慢一步,每每学完一个地方,我掌握的程度好像都不比他们,第一次实验室的任务实战,我两眼一抹黑,完全不知道从何下手,而他们却是游刃有余,可我当时没有丧气,只有一个念头,既然学习能力不如他们,那我就拿更多的时间去学,于是我把打游戏,运动锻炼的时间也拿来学习。到了暑假,实验室一起做项目,为了可以更好的参与进去,于是我暑假开始留校和同学师哥一起做项目,每天早上九点多去实验室,晚上十点多回宿舍,校田径队的训练没有去,中间也只回家待了一周。到暑假结束开学之后,一位很优秀的师哥拿到了几个offer,我从他身上看到了希望,双非本科就业的希望...
offer求求哩:我的评价是认知低,建议多看书,认知低的一个表现是人生仿佛没考上大学就是进厂,考上了就是考研考公找工作。股市里有一个很有意思的故事,说的是当门口大妈都在谈论股票的时候,说明行情已经见顶了。当你的父母在某些事上没有成功却支持你说明事情可能已经不可靠了,但在某些事上反对你,说明这件事可能还有成功的可能。(仅个人观点)😆😆
点赞 评论 收藏
分享
01-23 19:12
门头沟学院 Java
榨出爱国基因:你还差 0.1% 就拿到校招礼盒,快叫朋友给你砍一刀吧
投递拼多多集团-PDD等公司6个岗位
点赞 评论 收藏
分享
评论
3
6
分享

创作者周榜

更多
牛客网
牛客企业服务