每日做题总结——day01

目录

选择题

for循环

 指针数组

位段

getchar

大小端存储 

进制与格式控制符 

位运算 

数组指针 

二维数组的存储 

计算二进制中1的个数 

斐波那契数列求递归次数 

编程题 

删除公共字符

排序子序列 

倒置字符串 


 

选择题

for循环

 解析:该题主要看for循环中的条件表达式," j=0 " 该值是一个假的,因此该for循环将一次也不进入循环体语句,因此k还是刚开始赋初值的0,因此选择B。


 指针数组

 解析:acX数组和acY数组看似存入的值是一样的,其实不然。acX中是以字符串初始化,acY是以字符进行初始化,在acX中其实还隐藏的加入了一个'\0'。所以acX与axY占用的内存大小不一样,C错误。由于szX与szY中指向的数据是一样的,所以他们指向的地址是一样的。如果szX的内容改变(内容中存放的是地址),其实就是szX指针的指向改变了,并不影响szY的内容。因此选择D选项。


位段

 解析:位段中存放的单位为bit。首先为a开辟一个4字节(32位)的空间,a和b相加只有30,因此他们共同存入这个四字节大小的空间里面。再为c开辟一个4字节(32位)的空间,将c可以存入,c存入后还剩28个bit,已经不足以存放d。因此需要再次开辟4字节(32位)的空间,用来存储d。同样的

index由于空间不足需要再次开辟一段1字节(8位)的空间来存放。最后进行内存对齐后一共是16字节。

 因此选择C选项。


getchar

getchar是可以从键盘中接受单个字符的,由题可知我们是需要在键盘上输入一段字符,然后以回车('\n')结束,A、B、C选项中都是接受单个字符后,n++来统计次数,因此符合条件。但是D选项,很明显getchar只能再初始化表达式区域初始化一次,然后后续我们输入的字符它是接收不到的,更别提统计我们输入字符的个数了,因此选择D选项。


大小端存储 

 解析:由题可知,我们首先需要了解大小端存储数据的区别。

  1. 大端存储(Big Endian):将高字节存储在内存的低地址中,低字节存储在内存的高地址中。在大端存储方式下,一个多字节数据类型的值的最高位字节被放在了最前面(低地址)。

  2. 小端存储(Little Endian):将低字节存储在内存的低地址中,高字节存储在内存的高地址中。在小端存储方式下,一个多字节数据类型的值的最低位字节被放在了最前面(低地址)。

因此题中数据过程如图所示:

 因此该题选择B选项。该题输出结果没有按照预期的走是因为我们的格式控制符和类型不匹配导致的,因此我们注意在使用long long 类型的时候格式控制符应该使用%lld。


进制与格式控制符 

 解析:我们首先需要知道每个进制所对应的格式控制符和进制的表示。

在程序中,可以使用各种进制来表示常量或变量的值。例如,在C++中,可以使用以下表示方法:

  • 二进制:使用0b0B前缀,如int a = 0b1010;表示将二进制的1010转换为十进制的10,并将其赋值给变量a。
  • 八进制:使用0前缀,如int b = 017;表示将八进制的17转换为十进制的15,并将其赋值给变量b。
  • 十进制:直接书写数字即可,如int c = 123;表示将十进制的123赋值给变量c。
  • 十六进制:使用0x0X前缀,如int d = 0x1A;表示将十六进制的1A转换为十进制的26,并将其赋值给变量d。

需要注意的是,在程序中使用不同进制表示的数值,在内存中存储的方式是一样的,都是二进制形式。

格式控制符与进制的对应情况:

 

因此我们再去看题目的时候不难发现最后printf中两个数据都需要以八进制的形式打印,然而m=0123已经是八进制,输出的时候直接把0去掉输出123即可。但是n是以十进制的形式存在的,应该首先把该十进制转换为八进制。我们通过除8取余数的方法,可以算出123的八进制为173。

十进制123转换为八进制的步骤图:

因此我们选择C选项。


位运算 

 

解析:本题主要考察的是位运算。

位运算:

  • 按位与(&):将两个二进制数的每一位进行与运算,如果两个对应的位都是1,则结果为1,否则为0。例如,0b1010 & 0b1100 = 0b1000。
  • 按位或(|):将两个二进制数的每一位进行或运算,如果两个对应的位都是0,则结果为0,否则为1。例如,0b1010 | 0b1100 = 0b1110。
  • 按位异或(^):将两个二进制数的每一位进行异或运算,如果两个对应的位相同,则结果为0,否则为1。例如,0b1010 ^ 0b1100 = 0b0110。
  • 按位取反(~):对一个二进制数的每一位进行取反操作,即0变成1,1变成0。例如,~0b1010 = 0b0101。
  • 左移(<<):将一个二进制数的每一位向左移动若干位,低位用0补齐。例如,0b1010 << 2 = 0b101000。
  • 右移(>>):将一个二进制数的每一位向右移动若干位,高位用0补齐(逻辑右移)或用符号位补齐(算术右移)。例如,0b1010 >> 2 = 0b0010。

由题意知,我们需要将flag的第二个bit位置0,但是其他位不改变。最简单的方法就是直接对A、B、C、D。选项进行计算。这样我们就可以得出A选项是正确的。


数组指针 

 

这道题看似很复杂,我们只要明白其中每个变量表达的含义其实也不难。

首先第一行中,我们定义了一个类型为int的数组并且赋初值。 

第二行是关键。首先我们在这里阐述一个概念,数组名除了在&后边--&a和sizeof后--sizeof(a)的时候表示整个数组,其他时候都表示首元素的地址。

因此选择C选项。

 


二维数组的存储 

解析:该题主要考察了二维数组。

 

因此选择A选项。


计算二进制中1的个数 

 

 将9999传入这个参数,由于9999这个数并不小,所以直接算肯定是不可取的。所以我们要去寻找规律。

我们首先先传进去几个值来找一下规律。

当x为3时---count=3;当x为5时---count=2;当x为7时---count=3;

又因为在函数体里面进行的是位运算(也就是对二进制进行操作)我们发现该函数其实是求出了x的二进制中1的个数。我们将9999转换为二进制。

可得9999的二进制为10011100001111中1的个数为8,因此选择A选项。


斐波那契数列求递归次数 

 

由题意可知,cnt计算的是递归的次数。直接穷举。

 

因此选择B选项。

编程题 

删除公共字符

删除公共字符_牛客题霸_牛客网

 我们定义一个数组,根据字符本质在内存中以ASCII码值存在这一点,将str2中的字符首先映射到数组中。然后使用str1进行遍历,如果str1中有str2中没有,则存储起来。

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

int main()
{
    string str1;
    string str2;
    // 由于输入的字符串中有空格所以使用getline来接收字符串
    getline(cin,str1);
    getline(cin,str2);
    // 定义一个数组
    int hashTable[256]={0};
    // 先把str2的数据给映射到数组中
    int i=0;
    for(i=0;i<str2.size();i++)
    {
        hashTable[str2[i]]++;
    }

    string ret;

    // 使用str1来对比数组中的数据如果不存在则+=到ret中
    // 不存在的话就说明在str1中有 str2中没有 符合条件
    int j=0;
    for(j=0;j<str1.size();j++)
    {
        if(hashTable[str1[j]]==0)
        ret+=str1[j];
    }
    cout<<ret<<endl;
    return 0;
}

排序子序列 

排序子序列_牛客笔试题_牛客网 

这道题的关键就是我们需要明白非递减序列与非递增序列是什么。

非递增就是不是单调的递减的序列,如下所示:

3  3  2  1 就是一个非递增的序列。

在数组中就是满足a[i]>=a[i+1]。

非递减就是不是单调的递增序列,如下所示:

1 1 2 3 就是一个非递减序列。

在数组中就是满足a[i]<=a[i+1]。

 

#include <iostream>
#include <vector>
using namespace std;
int main() 
{
    int n = 0;
    cin >> n;
    vector<int> v;
    v.resize(n + 1);//多开辟一个空间是以防a[i+1]越界
    v[n] = 0;//题目中有说我们输入的只可能是正整数
    for (int i = 0; i < n; i++) 
    {
        cin >> v[i];
    }
    int i = 0, count = 0;
    while (i < n) 
    {
        if (i < n && v[i] < v[i + 1]) 
        {
            while (v[i] <= v[i + 1]) 
            {
                i++;
            }
            i++;
            count++;
        } 
        else if (i < n && v[i] > v[i + 1]) 
        {
            while (v[i] >= v[i + 1]) 
            {
                i++;

            }
            i++;
            count++;
        } 
        else 
        {
            i++;
        }
    }
    cout << count << endl;
    return 0;
}

倒置字符串 

倒置字符串_牛客题霸_牛客网 

 翻转法:

首先把整个字符串进行翻转,然后再把单个字符串进行翻转。

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

int main() {

    string str;
    getline(cin, str);
    // 先整体翻转
    reverse(str.begin(), str.end());
    //为起始位置定义一个名叫start的迭代器
    //这里我们使用auto自动识别类型
    auto start = str.begin();

    //这里while循环()里面给个1让它一直循环
    //等我们便利到str.end()的时候让函数体break就行
    while (1) {
        //定义一个end来遍历单个字符串
        auto end = start;
        //如果该字符串不为0或者不为str.end()
        //那么让它继续遍历说明此字符串还没到头
        while (*end != ' ' && end != str.end())
            end++;
        //翻转单个字符串
        reverse(start, end);
        //如果end遍历到了' ' 说明此字符串已经遍历完了
        //需进行下一个字符串的遍历 直接让start=end+1就行因为此时end处于
        //前一个字符串的尾部
        if (*end == ' ' && end != str.end())
            start = end + 1;
        //走到这里说明end==str.end()
        //注意 我们直接break 因为已经遍历完毕
        else
            break;

    }
    cout << str << endl;
}

拼接法: 

先接受一个字符串,然后让接下来接受的字符串都拼接在当前字符串前面,并且用' '隔开。(这里利用了cin输入的时候空格将输入的字符串隔开)。

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

int main()
{
    string s1, s2;
    //先将第一个字符串接受一下
    cin >> s1;
    // 接下来接受的字符串都加在s1的前面并且以' '隔开
    while (cin >> s2) 
        s1 = s2 + ' ' + s1;
    cout << s1 << endl;

}
// 64 位输出请用 printf("%lld")

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试题React

1.React Fiber是什么&#xff1f; 在 React V16 将调度算法进行了重构&#xff0c; 将之前的 stack reconciler 重构成新版的 fiber reconciler&#xff0c;变成了具有链表和指针的 单链表树遍历算法。通过指针映射&#xff0c;每个单元都记录着遍历当下的上一步与下一步&…

【从零开始学Skynet】工具篇(二):虚拟机文件的复制粘贴

大家在Linux系统下开发的时候肯定会遇到虚拟机与主机间无法复制粘贴的问题&#xff0c;现在我们就来解决这样的问题&#xff0c;方便我们的开发。 1、打开设置 我们可以系统界面的菜单栏点击“控制”&#xff0c;然后打开“设置”&#xff1b; 也可以在VirtualBox界面打开“设…

项目管理中,这些思维误区一定要避开

项目需要在限定的时间要求完成的事情&#xff0c;可控的关键把握是&#xff1a;人、时、事。 但是&#xff0c;项目实施时间一般较长&#xff0c;总有很多项目实施结果不尽人意。那么&#xff0c;IT项目管理过程中&#xff0c;容易出现哪些思维误区呢&#xff1f; 1、忘记项…

TCP三次握手四次挥手及time_wait状态解析

TCP的建立——三次握手 1.服务器必须准备好接受外来的连接。通常通过调用socket&#xff0c;bind&#xff0c;listen这三个函数来完成&#xff0c;我们称之为被动打开(passive open)。 2. 客户端通过调用connect函数发起主动的打开(active open)。这导致客户TCP发送一个SYN(同步…

Nginx基础教程

Nginx 目标 Nginx简介【了解】 Nginx安装配置【掌握】 一、Nginx简介 Nginx称为:负载均衡器或 静态资源服务器:html,css,js,img ​ Nginx(发音为“engine X”)是俄罗斯人编写的十分轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器&#xff0c;同时也是一个IMAP/P…

初探MyBatis实现简单查询

文章目录一、创建数据库与表1、创建数据库2、创建用户表3、添加表记录二、基于配置文件方式使用MyBatis1、创建Maven项目2、添加相关依赖3、创建用户实体类4、创建用户映射器配置文件5、创建MyBatis配置文件6、创建日志属性文件7、测试用户操作1)创建用户操作测试类2)测试按编号…

除了Jira、禅道还有哪些更好的敏捷开发过程管理平台?

无论是从国内的敏捷调研开发调研报告还是从国外的敏捷状态调查&#xff0c;工具支持一直是决定敏捷成功的关键因素之一&#xff0c;它们可以帮助团队提高软件开发的效率、质量、协作和满意度。选择合适的敏捷开发管理工具&#xff0c;并正确地使用它们&#xff0c;是每个敏捷团…

数字孪生(1)

目前接触的客户群体是做大屏展示&#xff0c;闲鱼上5元包邮的那种科技感前端&#xff08;不好意思我买了&#xff09;各路模型大整合 实景GISiOT&#xff0c;如果再来点动画就好&#xff0c;然满屏动起来&#xff0c;火灾烧起来&#xff0c;水面荡漾起来&#xff0c;工程车开起…

C/C++每日一练(20230414)

目录 1. 寻找峰值 &#x1f31f;&#x1f31f; 2. 相同的树 &#x1f31f; 3. 整数反转 ※ &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 寻找峰值 峰值元素是指其值严格大于左右…

如何借助ChatGPT,自动批量产出短视频爆款文案

如何借助chatgpt批量出爆款文案。 这里我们首先得认识并了解到爆款文案的逻辑。 共通性是打动人&#xff0c;去原创的话&#xff0c;文案能否火&#xff0c;纯靠天吃饭。 所以我们让chatgpt去自己写原创短视频文案&#xff0c;那么chatgpt大概率自由发挥&#xff0c;我们也不…

国产化ChatGPT来袭,景联文科技提供专业数据采集标注服务,人手一个专属ChatGPT或成为可能

ChatGPT作为一个颠覆性的创新&#xff0c;现已成为火爆全球的智能应用。 自ChatGPT爆火以来&#xff0c;国内科技圈开始频频发力&#xff0c;多家科技和互联网公司纷纷表示将开发出中国本土化的ChatGPT。 以百度为例&#xff0c;3月16日&#xff0c;百度推出新一代知识增强大语…

【Linux】页表的深入分析

上一篇文章介绍了线程的基本概念 而本篇文章我们来深入理解一下, CPU再调度我们以往理解的进程和如今的线程都会涉及到的一个内容: 页表 文章目录深入理解页表 *页表的实际组成*什么是page&#xff1f;深入理解页表 * 在介绍进程时, 博主没有深入介绍过页表. 只是简单说了 页…

展心展力 metaapp:基于 DeepRec 的稀疏模型训练实践

作者 metaapp-推荐广告研发部&#xff1a;臧若舟&#xff0c;朱越&#xff0c;司灵通 1 背景 推荐场景大模型在国内的使用很早&#xff0c;早在 10 年前甚至更早&#xff0c;百度已经用上了自研的大规模分布式的 parameter server 系统结合上游自研的 worker 来实现 TB 级别…

“三箭齐发”,诸葛智能三大产品全新升级,助力企业迈向数字化经营 | 爱分析调研

调研&#xff1a;文鸿伟 撰写&#xff1a;文鸿伟 诸葛智能&#xff0c;是容联云旗下敏捷开放的场景化数据智能服务商&#xff0c;累积服务全国1000企业&#xff0c;覆盖泛互联网、泛电商、金融、汽车、产业科技、企服等数十个垂直领域。 自2015年成立至今&#xff0c;诸葛智…

数据库管理-第六十五期 Oracle 23c新特性(20230411)

数据库管理 2023-04-11第六十五期 Oracle 23c新特性1 免费版23c目录结构2 新特性总结第六十五期 Oracle 23c新特性 上一期装了免费版23c&#xff0c;这一期根据安装的数据库&#xff0c;对Oracle 23c的部分新特性进行实验展示。 1 免费版23c目录结构 通过RPM包安装的免费版2…

背包问题-动态规划

背包问题 容量有限的背包&#xff0c;给很多商品&#xff0c;商品有相应的体积与价值 01背包问题 一个背包 每个物品只有一个 最终状态方程 dp[i][j]max(dp[i-1][j],dp[i-1][j-w[i]]v[i]) 推导过程 由上一层推导过来 选择拿不拿i 最终代码 #include<iostream> #…

前段时间面了10多个人,发现这些测试人都有个通病......

前段时间面了15个人&#xff0c;怎么说呢&#xff0c;基本上没有符合要求的&#xff0c;其实一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在10-20k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。 看简历很多都是3年工作经验&am…

GitHub标星15w,如何用Python实现所有算法?

学会了 Python 基础知识&#xff0c;想进阶一下&#xff0c;那就来点算法吧&#xff01;毕竟编程语言只是工具&#xff0c;结构算法才是灵魂。 新手如何入门 Python 算法&#xff1f; 几位印度小哥在 GitHub 上建了一个各种 Python 算法的新手入门大全。从原理到代码&#xf…

数据 数据元素 数据项 数据对象

文章目录数据、数据元素、数据项和数据对象数据数据元素数据对象数据元素和数据对象数据结构数据结构包括以下三个方面的内容逻辑结构物理结构&#xff08;存储结构&#xff09;逻辑结构与存储结构的关系逻辑结构的种类集合结构线性结构树型结构图状结构或网状结构四种基本的存…

webgl-根据鼠标点击而移动

html <!DOCTYPE html> <head> <style> *{ margin: 0px; padding: 0px; } </style> </head> <body> <canvas id webgl> 您的浏览器不支持HTML5,请更换浏览器 </canvas> <script src"./main.js"></script&g…