字符串相关
字符串相关:
插入元素: str.insert(pos,num,string);//pos是待查入的位置,num是插入几次,string是待插入的字符串 str.insert(pos,string);//与上面insert一样,不过只在pos位置插入string一次
查找指定字符串在原始字符串中的位置 int pos = str.find(target);//反会target字符串,在str中的起始位置
删除某一区间的字符串 str.erase(pos,num);//删除str字符串中,从pos位置为起点,num个长度的元素
获取字符串长度 int len = str.length(); int len = str,size();
ASCII码相关
A-Z 65-90
a-z 97-122
思路:
主要考察对C++字符串的操作
#include<bits/stdc++.h>
#include<string>
#include<iostream>
using namespace std;
int main()
{
string s;
cin>>s;
int n;
char ch;
cin>>n;
cin>>ch;
while(n>0)
{
int i,j;
cin>>i;
cin>>j;
int len = s.length();
bool flag=false;
int pos = 0;
for(int k = i-1;k<j;k++)
{
if(s[k]==ch)
{
pos = k;
flag = true;
break;
}
}
if(flag==true)
{
s.erase(pos,1);
}
else
{
string temp = "";
temp+=ch;
s = s.insert(j,temp);
}
n--;
}
cout<<s<<endl;
return 0;
}
题目描述:
有一组均由字符AZ和az组成的字符串,其中要求将字符串中各字符按如下要求进行转换:
A<->z、B<->y、C<->x、… 、X<->c、Y<->b、Z<->a。
输入样例:Algorithm
输出样例:zOTLIRGSN
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str;
cin>>str;
for(auto &cg:str)
{
if('A'<=cg && cg<='Z')
{
cg = 'z'-(cg-'A');
}
else if('a'<=cg && cg<='z')
{
cg = 'Z'-(cg-'a');
}
}
cout<<str<<endl;
}
vector相关
排序:
sort(nums.begin(),nums.end());
输出某个整数的小数点后两位:printf("%.2f",a);
智能除草
农业植保无人机作为最新的设备,可以加注除草剂进行除草。每次工作可以喷洒边长为K的正方形区域。现有一块边长为N的正方形农田,将其分成N*N个方格单元,已知每个单元里的杂草数量。求该植保无人机一次工作最多可以除草的数量。
输入说明:
第一行是2个正整数,分别为N和K(1≤K≤N≤1000)。
之后N行N列正整数,表示每个单元中的杂草数量(不超过50)。
输出说明:
该植保无人机一次工作最多可以除草的数量。
输入样例:
5 2
2 2 1 1 1
1 2 1 5 6
6 1 1 4 5
2 6 1 1 1
1 1 1 1 1
输出样例:
20
按照最后一次提交的代码为评分标准
思路:
先收集农田大小
然后再遍历每个小矩阵,将小矩阵内最大和的值作为最终的结果。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k;
cin>>n;
cin>>k;
int max_num = 0;
vector<vector<int>>vec(n,vector<int>(n,0));
for(int i = 0;i<n;i++)
{
for(int j = 0;j<n;j++)
{
int temp = 0;
cin>>temp;
vec[i][j] = temp;
}
}
for(int i = 0;i<=n-k;i++)
{
for(int j = 0;j<=n-k;j++)
{
int sum = 0;
for(int p = 0;p<k;p++)
{
for(int q = 0;q<k;q++)
{
sum+=vec[i+p][j+q];
}
}
max_num = max(max_num,sum);
}
}
cout<<max_num<<endl;
}
题目描述
小明今天收了N个鸡蛋,每个鸡蛋各有重量,现在小明想找M个重量差距最小的鸡蛋摆成一盒出售,输出符合条件的最重一盒鸡蛋的总重量.
输入说明
第一行,用空格分隔的2个整数,分别表示鸡蛋个数N(N<1000)和每盒个数M(M<N);
第二行,N个鸡蛋重量(浮点)。
输出说明
1行,符合条件的最重一盒鸡蛋的总重量(保留2位小数)
输入样例
8 4
11 9 12 5 10 19 8 6
输出样例
42.00
int main()
{
int n,m;
cin>>n>>m;
vector<int>vec;
for(int i = 0;i<n;i++)
{
int temp = 0;
cin>>temp;
vec.push_back(temp);
}
sort(vec.begin(),vec.end());
double min_num = 1e8;
unordered_map<double,double>dict;
for(int i = 0;i<=n-m;i++)
{
double temp=0;
double flag =0;
int ans = 0;
for(int j = i;j<i+m;j++)
{
temp+=vec[j];
flag+=(vec[j]-vec[i]);
}
dict[flag] = temp;
min_num = min(min_num,flag);
}
printf("%.2f",dict[min_num]);
}
模拟
题目描述
Excel表列名称由字母A~Z组成,列字母的规律如下:A、B、C…Z、AA、AB…AZ、BA、BB…ZZZZY、ZZZZZ…,现在请你计算2列之间含有多少列单元格。
输入样例
AA AZ
输出样例
24
思路:
先判断第一个是在第多少行
再判断第二是是在多少行
两者相减再-1
int main()
{
string str1,str2;
cin>>str1;
cin>>str2;
int res1 = 0,res2 = 0;
for(int i = str1.size()-1,j = 1;i>=0;i--,j*=26)
{
res1 += (str1[i]-'A')*j;
}
for(int i = str1.size()-1,j = 1;i>=0;i--,j*=26)
{
res2 += (str2[i]-'A')*j;
}
int res = (res1>res2? res1-res2:res2-res1);
cout<<res-1<<endl;
}