目录
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; }
};