笔试强训day05(统计回文,连续最大和)

目录

第一题-选择题1

第二题-统计回文

第三题-连续最大和


第一题-选择题1

 

答案:16 16,16 24 

思路:

        结构体内存对齐规则

a.结构体成员对齐

1.第一个成员使用在对其的地址上,编译器自动识别

2.对于其余成员,该成员子结构体中的偏移量能否被min(该成员类型大小,对齐参数)整除,如果可以在对齐的地址上,如果不可以在改成员之前补充一些字节,补到偏移量刚好可以倍min整除

b.结构体整体对齐

a算完后,结构体已经有了一个大小size,然后计算能否被min(改结构体成员最大类型所占字节数,对齐参数)整除,如果可以则对齐,否则需要在结构体最后补充一些自己二,将size增加到min的最小整数倍

第二题-统计回文

思路:

        1.找到合适的位置插入

        2.判断是否是回文

#include<iostream>
#include<string>
using namespace std;
bool Iscricle(string str)
{
    int begin = 0;
    int end = str.size()-1;
    while(begin < end)
    {
        if(str[begin] != str[end])
        {
            return false;
        }
        begin++;
        end--;
    }
    return true;
    
}
int main ()
{
    string str1;
    string str2;
    int count = 0;
    getline(cin, str1);
    getline(cin, str2);
    //从第一个位置开始依次插入str2
    for(int i = 0; i <= str1.size(); ++i)
    {
        //防止修改str1,用str代替
        string str = str1;
        str.insert(i, str2);
        //每次插入的时候判断是否是回文
        if(Iscricle(str))
        {
            count++;
        }
    }
    cout<<count<<endl;
}

第三题-连续最大和

思路:

        定义数组dp[i]以i结尾的子数组,现在用dp[i-1]+arr[i]和arr[i]比较,如果dp[i-1]的子数组加上当前arr[i]比当前arr[i]大则保留dp[i-1]+arr[i],否则保留arr[i],依次遍历,每次选出最大的保留下来

#include<iostream>
#include<vector>
using namespace std;
int Getmax(int a, int b)
{
    return (a) > (b) ? (a) : (b);
}
int main ()
{
    int size = 0;
    cin >> size;
    vector<int>num(size);
    for(int i = 0; i < size; ++i)
    {
        cin >> num[i];
    }
    int sum = num[0];
    int max = sum;
    //依次插入
    for(int i = 1; i < size; ++i)
    {
        //依次判断
        sum = Getmax(sum + num[i], num[i]);
        if(sum >= max)
        {
            max = sum;
        }
    }
    cout << max << endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

penguin_bark

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值