目录
1.查找组成一个偶数最接近的两个素数
2.二进制插入
3.strlen和sizeof
4.strcat和strcpy
5.多维数组的解引用
6. 统计回文
7. 连续最大和
8.转义字符%
9.不要二
10.把字符串转换成整数
观察这个题目的要求,我们发现这两个素数一定是分布在n两侧
为了提高效率,可以从中间开始寻找
最后输出的两个素数必须满足:1.是素数 2.这个素数对的差,比其他满足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
首先观察他给的例子
6 2
1024:0100 0000 0000
19: 0001 0011
位运算之后变成
0100 0100 1100
其实你有没有发现,他就是把m(19)左移j,之后和n加在一起
因为n在要插入的一段都是0,所以直接加上也不会有进位
strlen:计算字符串长度,遇到'\0'就停止,并不会记录'\0'
sizeof:计算数组所占内存空间的大小,因为本题是数组里面是char类型数据,所以sizeof的结果=字符串长度*1 看起来好像计算长度,实际不是
注意这两个函数返回值:strcat返回追加之后字符串的首元素地址
strcat(p1+x,p2+y):把p1+x位置一直到p1结束的字符串拿出来 加上 p2+y位置一直到p2结束的字符串,最后返回p1+x位置的地址
strcpy(p1+x,p2+y):把p2+y拷贝到p1+x位置,返回p1的地址
类比一下我们熟悉的二维数组解引用的方式
解题思路就是把第二个字符串依次插入一下第一个字符串的空隙,看看构不构成回文,然后统计次数
#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<
#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;
}
在printf进行流输入的时候,需要规定输入的格式,一般用%
%后面如果加上比较特殊的字母,比如:%s(以字符串的形式输出),%d(以整数的形式输出),%f(以浮点数的方式)...
但是后面如果是一般的字符,编译器默认忽略第一个%
比如%q,编译器会默认忽略%,只输出q
#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
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;
}
};