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
*/
基恩士成长空间 426人发布

