【刷题笔记】结构体内存对齐举例+统计回文

news2024/10/5 16:25:38

一、结构体内存对齐举例

题目:

下面存在两个结构体:

struct One
{
    double d;
    char c;
    int i;
}
struct Two
{
    char c;
    double d;
    int i;
}

在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是?

分析:

        C/C++中结构体计算其大小涉及到内存对齐问题。(详细可以参考我这篇博客:结构体、位段、共用体、枚举相关内存知识(c语言)_柒海啦的博客-CSDN博客)

        这里可以简单总结一下这类问题的求解步骤:

a、内存对齐过程

        1.首先起始地点定为0。

        2.每个变量偏移对应自己类型大小的字节数。

        3.每个变量的起始位置下标必须是min(变量字节大小, 默认对齐字节数)的整数倍,不足需要向前补齐。

b、内存对齐结束后总大小

        当每个变量对齐完后统计总大小必须是min(变量中最大类型大小, 默认对齐字节数)的整数倍,不足向前补齐。

解答:

        1.如果是#pragma pack(4),说明设置的默认对齐字节数为4.

        对于结构体One,对齐过程如下:

        所以最后大小为16byte。同理,可以计算出Two的大小为16。

        2.如果是#pragma pack(8),说明设置的默认对齐字节数为8.       

        对于结构体Two,对齐过程如下:

        所以,结构体Two计算出总大小为24byte。同理,结构体One计算出大小为16byte。

二、统计回文

题目:

牛客网链接:统计回文_牛客题霸_牛客网

描述

        “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。
例如:
        A = “aba”,B = “b”。这里有4种把B插入A的办法:
        * 在A的第一个字母之前: "baba" 不是回文
        * 在第一个字母‘a’之后: "abba" 是回文
        * 在字母‘b’之后: "abba" 是回文
        * 在第二个字母'a'之后 "abab" 不是回文
        所以满足条件的答案为2

输入描述:

        每组输入数据共两行。 第一行为字符串A 第二行为字符串B 字符串长度均小于100且只包含小写字母

输出描述:

        输出一个数字,表示把字符串B插入字符串A之后构成一个回文串的方法数

示例1

输入:aba b

输出:2

分析:

        首先遇到字多的体型,不需要害怕,因为大部分应该是废话。我们只需要抓住重点即可:1.字符串B插入字符串A(位置可不同),2.使新串是一个回文串。

        理清思路这个题就迎刃而解了。我们首先就字符串B在字符串A的不同位置进行插入,每次插入后,判断是否为回文串(从前往后读和从后往前读相等),是就统计一次,否则不统计。对于不同位置来说,根据字符串A的字符个数应该存在size(A) + 1个空处。

        针对示例,我们有如下的解题过程:

解答:

        因为存在多次插入字符串A进行检测回文串,所以我们编码实现的时候需要用临时对象进行存储。判断回文串可以通过双指针一个从头一个从后对比字符是否相等,也可以逆置一下判断是否相等进行判断。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

bool isPalindrome(string& str)
{
    string temp = str;
    reverse(temp.begin(), temp.end());
    return str ==temp;
}

int main()
{
    string str1, str2;
    getline(cin, str1);
    getline(cin, str2);

    int count = 0;
    for (int i = 0; i <= str1.size(); ++i)
    {
        string str = str1;
        str.insert(i, str2);
        if (isPalindrome(str)) count++;
    }
    cout << count << endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/495702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql8.0性能对比以及新特性

MySQL8.0 性能测试与新特性介绍 性能对比 测试内容 测试mysql5.7和mysql8.0 分别在读写、只读、只写模式&#xff08;&#xff08;oltp_read_write&#xff0c;oltp_read_only&#xff0c;oltp_write_only&#xff09;&#xff09;下不同并发时的性能&#xff08;tps&#x…

《微服务实战》 第一章 Java线程池技术应用

前言 介绍Java的线程、线程池等操作 1、Java创建线程方式回顾 1.1、继承Thread类(只运行一次) public class ThreadTest extends Thread{Overridepublic void run() {System.out.println(Thread.currentThread().getName());}public static void main(String[] args) {new …

【python】keras包:深度学习( MLP多层感知器 Multi-Layer Perceptron)

MLP多层感知器 Multi-Layer Perceptron Part 1. 算法逻辑 实现经典问题——如何通过图像区分猫和狗 神经网络&#xff1a;建立模型&#xff0c;模仿人的思考机制 将“机器学习_逻辑回归”按照神经元的逻辑&#xff0c;组成逻辑网络。 解释&#xff1a; 假设自变量x[]和应变…

档案库房建设需要遵守的一些规定

各单位在建设档案室时需要对照《机关档案管理规定》《档案馆建筑设计规范》关于档案库房的相关标准&#xff0c;对库房的位置、面积、承重、安全等方面进行全面考虑&#xff0c;建设符合国家规定的档案库房。 档案库房建设需要遵守什么规定&#xff1f; 一、《机关档案管理规定…

Transformer的位置编码

1. 什么是位置编码&#xff0c;为什么要使用位置编码 简单来说位置编码就是给一个句子中的每个token一个位置信息&#xff0c;通过位置编码可以明确token的前后顺序关系。 对任何语言来说&#xff0c;句子中词汇的顺序和位置都是非常重要的。它们定义了语法&#xff0c;从而定…

DP(9)--插头DP

DP(9)--插头DP /* Mondriaan’s Dream题目大意&#xff1a;在 N*M 的棋盘内铺满 1*2 或 2*1 的多米诺骨牌&#xff0c;求方案数。 砖只有横放和竖放两种状态&#xff0c;把横放记为两个0&#xff0c;竖放记为上1下0&#xff0c;逐格DP&#xff0c;每次无论前一格…

Kali Linux 配置动态/静态 IP

[笔者系统版本] [Kali]: Kali Linux 2023.1 [Kernel]: kernel 6.1.0 [Desktop]: Xfce 4.18.1 1. Kali Linux 配置动态 IP (1). 首先查看网卡接口名称。 (2). 编辑网络接口配置文件。 (3). 网络接口配置文件的默认内容是这样的。 (4). 新增配置内容如下&#xff1b; 指定网卡…

ChatGPT :十几个国内免费可用 ChatGPT 网页版

前言 ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;美国OpenAI 研发的聊天机器人程序 &#xff0c;于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过理解和学习人类的语言…

浅析智慧充电桩云平台的技术设计方案

自从我国提出“新基建”以来&#xff0c;充电基础设施产业也成为行业的话题与关注焦点。据数据统计&#xff0c;2021年&#xff0c;中国新能源汽车保有量达到784万辆&#xff0c;预计2025年&#xff0c;中国新能源汽车保有量达到2672万辆&#xff0c;2025年充电桩数量将达到654…

SwiftUI 新 Alert 弹出窗口帮你实现文本输入之梦

概览 小伙伴们都知道&#xff0c;弹出 Alert 不能包含文本输入框是 SwiftUI 的阿喀琉斯之踵(Achilles’ Heel) 。当然&#xff0c;这说的有些夸张了。&#x1f609; 不过&#xff0c;Alert 不能包含 TextField 在某些情况下着实不方便。于是乎&#xff0c;从 SwiftUI 3.0&…

[pgrx开发postgresql数据库扩展]附1.存储过程的优缺点与数据库扩展函数

俗话说&#xff1a;天下大势&#xff0c;分久必合&#xff0c;合久必分。 最早的软件系统开发&#xff0c;讲究的就是一个全栈——在最早期的桌面软件时代&#xff0c;数据、用户界面和业务逻辑是完全混在一起的&#xff0c;讲究的就是一个一体化……那个年代也诞生了大量的码农…

MySQL基础(三)基本的SELECT语句

1. SQL概述 1.1 SQL背景知识 1946 年&#xff0c;世界上第一台电脑诞生&#xff0c;如今&#xff0c;借由这台电脑发展起来的互联网已经自成江湖。在这几十年里&#xff0c;无数的技术、产业在这片江湖里沉浮&#xff0c;有的方兴未艾&#xff0c;有的已经几幕兴衰。但在这片浩…

同步辐射散射数据处理:从测量到分析的全流程解析

同步辐射散射数据处理&#xff1a;从测量到分析的全流程解析 同步辐射&#xff08;Synchrotron radiation&#xff0c;SR&#xff09;是指粒子在强磁场中受到加速或转向时所放出的辐射。这种辐射是一种非常强烈、具有非常高能量和亮度的电磁辐射。同步辐射散射&#xff08;Sync…

怎么控制别人的电脑屏幕?

为什么需要控制别人的屏幕&#xff1f; 我们不可避免地会遇到一些情况&#xff0c;比如我们需要为我们的朋友、同事或家人提供有关 IT 相关问题的帮助&#xff0c;如果他们不知道它该怎么处理这些问题该怎么办呢&#xff1f; 这时&#xff0c;我们可能需要用我们的电脑…

聊点技术 | 全新功能,让Bonree ONE变得更强

4月21日&#xff0c;博睿数据ONE有引力2023春季产品发布会圆满落幕&#xff0c;Bonree ONE 2023春季正式版正式发布&#xff0c;带来更轻、更强、更智能的一体化智能可观测平台。 全新功能&#xff0c;让Bonree ONE变得更强 本文作者 产品经理高天明、产品经理吴学飞、产品经…

Mysql监控账号创建【Prometheus】

Mysql的监控采用一个使用mysqld_exporter启动多个进程来实现监控多个mysql实例。 代理部署架构如下 1&#xff0c;创建数据库监控账号 create user 监控账号mysqld_exporter主机的IP identified by 监控密码 with max_user_connections 10; 2&#xff0c;权限授予 grant pr…

KDSL-82-1000A大电流发生器

一、产品简介 KDSL-82-1000A大电流发生器&#xff08;简称升流器&#xff09;&#xff0c;我公司自行研制开发的测试设备&#xff0c;它集国内外同类产品的优点于一身&#xff0c;采用数控技术&#xff0c;抗干扰能力强&#xff0c;和上一代升流器相比&#xff0c;由于采用低功…

NetSuite .id的用法

我们必须认清一个事实&#xff0c;NetSuite Saved Search是一个被封装化的SQL查询工具。在NetSuite的早期版本中&#xff0c;可以利用Formula字段做很多SQL语句上的灰色应用。但是慢慢的&#xff0c;灰色应用范围被压缩了。目前只剩下一个“.id”的应用了。 今朝我们就谈谈.id…

网络管理员优化提高网络性能需要关注的三个指标

网络管理员有一个主要责任&#xff1a;确保其网络的正常运行时间&#xff0c;同时不影响网络性能。然而&#xff0c;随着现代可部署解决方案通过传统的网络架构&#xff0c;这说起来容易做起来难。尽管现代解决方案在效率方面绝对比传统解决方案更上一层楼&#xff0c;但它们也…

任务态相关的一些知识总结

静息态的数据处理现在都比较简单了&#xff0c;因为有了fmriprep和qsiprep流程工具&#xff0c;没有特别的难度。 而关于任务态&#xff0c;则有一些独特的处理方式&#xff0c;因为最近要做任务态的数据分析&#xff0c;所以学习一下。 先学习下R的4个重输出函数&#xff1a;…