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

目录

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

2.二进制插入

3.strlen和sizeof

4.strcat和strcpy

5.多维数组的解引用

6. 统计回文

7.  连续最大和

8.转义字符%

9.不要二

10.把字符串转换成整数


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

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

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

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

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

 

#include 
using namespace std;
bool is_prime(int x)
{
for(int i=2;i>n;
    int gap=n;
    int i=n/2;
    while(i)
    {
       if(is_prime(i) && is_prime(n-i))
       {
        if(n-i-i

2.二进制插入

首先观察他给的例子

                        6        2

1024:0100  0000  0000

19:          0001   0011

位运算之后变成

            0100 0100    1100

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

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

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

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

 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的地址

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

 5.多维数组的解引用

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

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

 6. 统计回文

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

#include 
#include 
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<

7.  连续最大和

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

 

#include 
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

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

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

9.不要二

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

#include 
#include 
using namespace std;

int main() {
 int row,col;
 cin>>row>>col;
 vector> vv(row,vector(col,0)); //初始化
 int ans=0;
 for(int i=0;i

 10.把字符串转换成整数

【C++】牛客面试经典题,查找组成一个偶数最接近的两个素数.二进制插入.统计回文.连续最大和.不要二.把字符串转换成整数_第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'9')
    return 0;
    ans=ans*10+str[i]-'0';
}
      return flag*ans; 
    }
};

你可能感兴趣的:(c++,算法,开发语言)