【C++】牛客面试经典题,查找组成一个偶数最接近的两个素数.二进制插入.统计回文.连续最大和.不要二.把字符串转换成整数

目录

1.查找组成一个偶数最接近的两个素数

2.二进制插入

3.strlen和sizeof

4.strcat和strcpy

5.多维数组的解引用

6. 统计回文

7.  连续最大和

8.转义字符%

9.不要二

10.把字符串转换成整数


1.查找组成一个偶数最接近的两个素数

观察这个题目的要求,我们发现这两个素数一定是分布在n两侧

为了提高效率,可以从中间开始寻找

最后输出的两个素数必须满足:1.是素数 2.这个素数对的差,比其他满足1的素数对要小

 

 

#include <iostream>
using namespace std;
bool is_prime(int x)
{
for(int i=2;i<x;i++)
{
    if(x%i==0) return false;
}
return true;
}
int main() {
    int a, b;
    int n;
    cin>>n;
    int gap=n;
    int i=n/2;
    while(i)
    {
       if(is_prime(i) && is_prime(n-i))
       {
        if(n-i-i<gap)
        {
            a=i;
            b=n-i;
            gap=n-i-i;
        }
       }
       i--;
    }
  cout<<a<<endl;
  cout<<b<<endl;
  return 0;
}

2.二进制插入

首先观察他给的例子

                        6        2

1024:0100  0000  0000

19:          0001   0011

位运算之后变成

            0100 0100    1100

其实你有没有发现,他就是把m(19)左移j,之后和n加在一起

因为n在要插入的一段都是0,所以直接加上也不会有进位

 3.strlen和sizeof

 strlen:计算字符串长度,遇到'\0'就停止,并不会记录'\0'

sizeof:计算数组所占内存空间的大小,因为本题是数组里面是char类型数据,所以sizeof的结果=字符串长度*1  看起来好像计算长度,实际不是

4.strcat和strcpy

注意这两个函数返回值:strcat返回追加之后字符串的首元素地址

strcat(p1+x,p2+y):把p1+x位置一直到p1结束的字符串拿出来 加上 p2+y位置一直到p2结束的字符串,最后返回p1+x位置的地址

strcpy(p1+x,p2+y):把p2+y拷贝到p1+x位置,返回p1的地址

 5.多维数组的解引用

类比一下我们熟悉的二维数组解引用的方式 

 6. 统计回文

解题思路就是把第二个字符串依次插入一下第一个字符串的空隙,看看构不构成回文,然后统计次数

#include <iostream>
#include <string>
using namespace std;
bool is(string s)
{
  for(int i=0;i<=s.size();i++)
  {
    if(s[i]!=s[s.size()-i-1]) return false;
  }
return true;
}
int main() {
     string s1,s2;
     cin>>s1;cin>>s2;
     int ans=0;
     for(int i=0;i<=s1.size();i++)
     {
        string tmp=s1;
        tmp.insert(i,s2);
        if(is(tmp)) ans++;
     }
cout<<ans<<endl;
return 0;
}

7.  连续最大和

 

 

#include <iostream>
using namespace std;

int main() {
    int sum; //记录当前位置的总和
    int ans; //最大的连续和
    int n; //个数

    cin >> n >> sum; //直接把第一个输入的数字作为起始的和
    ans = sum;
    while (--n) //因为已经输入一个数字,只需要输入n-1次
    {
        int t; //临时变量接下来的数字
        cin >> t;
        sum = max(sum + t, t); //sum判断一下加不加这个变量
        ans = max(ans, sum); //ans是之前的ans和sum的最大
    }
    cout << ans << endl;
    return 0;
}

8.转义字符%

在printf进行流输入的时候,需要规定输入的格式,一般用%

%后面如果加上比较特殊的字母,比如:%s(以字符串的形式输出),%d(以整数的形式输出),%f(以浮点数的方式)...

但是后面如果是一般的字符,编译器默认忽略第一个%

比如%q,编译器会默认忽略%,只输出q

 

9.不要二

 

#include <iostream>
#include <vector>
using namespace std;

int main() {
 int row,col;
 cin>>row>>col;
 vector<vector<int>> vv(row,vector<int>(col,0)); //初始化
 int ans=0;
 for(int i=0;i<vv.size();i++)
 {
    for(int j=0;j<col;j++)
    {
        if(!vv[i][j])
       {
         ans++;
        if(i+2<row)
        vv[i+2][j]=1;
        if(j+2<col)
        vv[i][j+2]=1;
       }
    }
 }
 cout<<ans<<endl;
}

 10.把字符串转换成整数

 

 

class Solution {
public:
    int StrToInt(string str) {
        int flag=1;
        int i=0;
         if(str[i]=='-' || str[0]=='+')
        {
            if(str[0]=='-')
            flag=-1;
            i++;
        }
        
int ans=0;
for(;i<str.size();i++)
{
     
    if(str[i]<'0'||str[i]>'9')
    return 0;
    ans=ans*10+str[i]-'0';
}
      return flag*ans; 
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2023全牛客史上最全MySQL大厂常问面试合集,是一份总结了许多MySQL常见面试的资料。在MySQL作为关系型数据库中的重要一员,业界使用率极高,为了大厂面试的必考点之一。对于面试者来说,掌握MySQL相关知识无疑是非常重要的。 面对这样一份面试合集,我们需要掌握MySQL的基本架构、性能优化、存储引擎等方面的知识。首先,我们需要了解MySQL的基本架构,即MySQL架构的三层结构,包括连接处理层、查询处理层和存储引擎层。此外,对于查询语句的优化,我们需要了解索引的使用、查询语句的执行流程等概念,并且掌握MySQL自带的调优工具。 在MySQL性能优化方面,我们可以从硬件、操作系统、MySQL本身以及SQL语句的角度入手。例如,可以从MySQL参数配置、SQL执行计划、SQL调优等方面解决性能问。同时,由于存储引擎对于MySQL的性能非常关键,我们也需要了解InnoDB和MyISAM这两种主流存储引擎的特点与优缺点,及其在实际应用中的使用情况。 总之,掌握MySQL的基本架构、性能优化、存储引擎等知识是应聘MySQL岗位时不可或缺的必备技能。面对这份全牛客史上最全MySQL大厂常问面试合集,需要认真学习、反复练习,并对自己的掌握情况进行不断的总结与提高。只有做到这些,才能在面试中展现出自己的实力,获得满意的工作机会。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值