挑战杯刷题

字符串相关

字符串相关:

插入元素:
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


挑战杯刷题_第1张图片

思路:
主要考察对C++字符串的操作

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

题目描述:
有一组均由字符AZ和az组成的字符串,其中要求将字符串中各字符按如下要求进行转换:
A<->z、B<->y、C<->x、… 、X<->c、Y<->b、Z<->a。
输入样例:Algorithm
输出样例:zOTLIRGSN

#include

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<

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

using namespace std;

int main()
{
    int n,k;
    cin>>n;
    cin>>k;
    int max_num = 0;
    vector>vec(n,vector(n,0));

    for(int i = 0;i>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

题目描述
小明今天收了N个鸡蛋,每个鸡蛋各有重量,现在小明想找M个重量差距最小的鸡蛋摆成一盒出售,输出符合条件的最重一盒鸡蛋的总重量.
输入说明
第一行,用空格分隔的2个整数,分别表示鸡蛋个数N(N<1000)和每盒个数M(M 第二行,N个鸡蛋重量(浮点)。
输出说明
1行,符合条件的最重一盒鸡蛋的总重量(保留2位小数)
输入样例
8 4
11 9 12 5 10 19 8 6
输出样例
42.00

int main()
{
    int n,m;
    cin>>n>>m;
    vectorvec;
    for(int i = 0;i>temp;
        vec.push_back(temp);
    }
    sort(vec.begin(),vec.end());
    double min_num = 1e8;
    unordered_mapdict;
    for(int i = 0;i<=n-m;i++)
    {
        double temp=0;
        double flag =0;
        int ans = 0;
        for(int j = i;j

模拟

最大公因数
辗转相除法
挑战杯刷题_第2张图片

最小公倍数
两个数字的乘积/最大公因数
挑战杯刷题_第3张图片


题目描述
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<

你可能感兴趣的:(刷题记录,算法)