每日做题总结——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")

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

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

相关文章

【Java实战篇】Day6.在线教育网课平台

文章目录一、需求&#xff1a;绑定媒资1、需求分析2、库表设计与模型类3、接口定义4、Mapper层开发5、Service层开发6、完善controller层二、需求&#xff1a;课程预览1、需求分析2、实现技术3、模板引擎4、Freemarker入门5、部署网站门户6、接口定义7、接口开发8、编写模板9、…

chrome中debugger调试定位不准确

问题&#xff1a;代码中添加了debugger代码进行调试&#xff0c;但总是定位不到标注了debugger的位置 代码中debugger在33行浏览器调试定位到了78行 准确定位方法&#xff1a;

CASE WHEN函数语句多条件下使用详解

目录 CASE 的两种格式&#xff1a; 简单CASE函数 和 CASE搜索函数 同时配合 SUM 以及 COUNT 方法的使用 ① SUM函数 ② COUNT函数 CASE WHEN函数语句&#xff0c;实现简单CASE函数和CASE搜索函数两种格式。同时配合 SUM以及COUNT方法的使用 CASE 的两种格式&#xff1a; 简…

请问网络安全员,渗透师,和黑客三者是什么关系?

举个例子 黑客其实就是想偷偷进一个房子的小偷 程序员就是建这个房子的建筑工人 网络安全员就是维护这个房子的物业人员 渗透师就是检查房子【有没有能偷偷进入的窗口&#xff0c;能被撬动的锁&#xff0c;能破解的密码门】的人 有人问为什么那么多网安盯着还能让黑客进入…

深入了解jvm垃圾回收

1、为什么要有GC&#xff0c;哪些内存对象需要回收&#xff1f; 对于一个Java开发者来说&#xff0c;了解过Java内存区域的都知道&#xff0c;Java内存区域分了堆、栈、程序计数器等等。 Java的程序计数器&#xff0c;栈内存 &#xff0c;他们随线程生&#xff0c;随线程灭&a…

Alibaba开源的Java诊断工具Arthas-实战

目录参考一、启动二、支持的ognl表达式三、监听参数监听Controller 的参数和返回值监听完整参数和返回值监听kafka消费监听单个参数监听异常按照耗时进行过滤监听参数比较四、变量和方法查询静态成员变量值查询配置类具体属性的值通过类加载器查看Spring容器中对象所有属性执行…

[ 应急响应基础篇 ] 解决远程登录权限不足的问题(后门账号添加远程桌面权限)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

深入浅出Kafka

这个主题 武哥漫谈IT &#xff0c;作者骆俊武 讲得更好 一、什么是Kafka&#xff1f; 首先我们得去官网看看是怎么介绍Kafka的&#xff1a; https://kafka.apache.org/intro Apache Kafka is an open-source distributed event streaming platform. 翻译成中文就是&#xff1…

【JavaWeb】8—过滤器

⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 如果文章对你有所帮助&#xff0c;可以点赞&#x1f44d;…

【架构师从零进阶】Java基础 练气期 Day1

目标与路径 学习周期和目标 基础&#xff1a;需要有多年的面向对象设计经验&#xff0c;至少筑基期的水平&#xff0c;为了打好基础并提升到元婴期重新学习&#xff0c;大约需要1年&#xff1b; 学习目标&#xff1a;Java 高级开发者&#xff08;元婴期&#xff09;&#xf…

旅游心得Traveling Experience

前言 加油 原文 旅游心得常用会话 ❶ Share photos of the trip with friends. 与朋友分享旅游的照片。 ❷ We’ll go to the Great Wall, if you prefer. 你如果愿意的话,我们去长城。 ❸ Would you go to the church or the synagogue or the mosque? 你会去教堂,犹太…

从零开始:如何集成美颜SDK到你的应用中

现在&#xff0c;随着人们对于美的追求不断提升&#xff0c;美颜应用已经成为了人们生活中不可或缺的一部分。在应用中&#xff0c;美颜功能的实现离不开美颜SDK的支持。那么&#xff0c;如何集成美颜SDK到你的应用中呢&#xff1f;下面&#xff0c;我们就来一步步了解。 第一…

Redis常用命令以及如何在Java中操作Redis

前言Redis是一个基于内存的key-value结构数据库&#xff0c;是互联网技术领域使用最为广泛的存储中间件。Redis基于内存存储&#xff0c;读写性能高&#xff0c;适合存储热点数据&#xff08;热点商品、资讯、新闻&#xff09;。Redis是一个开源的内存中的数据结构存储系统&…

软件测试面试复盘:技术面没有难倒我,hr面被虐的体无完肤

一般提到面试&#xff0c;肯定都会想问一下面试结果&#xff0c;我就大概的说一下面试结果&#xff0c;哈哈&#xff0c;其实不太想说&#xff0c;因为挺惨的&#xff0c;并没有像很多大佬一样 ”已拿字节阿里腾讯各大厂offer”&#xff0c;但是毕竟是自己的经历&#xff0c;无…

收割offer疯狂涨了5K,自动化测试面试题整理大全,你能答上多少?

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 自动化基础能力 软件…

RBF-UKF径向基神经网络结合无迹卡尔曼滤波估计锂离子电池SOC(附MATLAB代码)

目录 RBFNN训练结果 UKF估计SOC 文章的结尾红色部分有彩蛋 RBFNN训练结果 这篇文章主要介绍如何使用RBF神经网络训练出的参数并结合UKF算法完成锂离子电池SOC的估计&#xff0c;有关RBF参数训练过程的代码分析放在2天后的下一篇文章&#xff0c;这里只给出训练完成后的结果…

在cmd命令窗口安装Python模块

Windows系统安装Python后&#xff0c;可以在cmd命令窗口安装Python的第三方库。建议选择pip命令来安装第三方库&#xff0c;因为在Python3.4及以后的版本&#xff0c;安装Python后pip模块也绑定安装了&#xff0c;其次使用pip命令很简单。 1. 一般命令 使用pip安装模块的一般…

GuLi商城-SpringCloud-Gateway网关核心概念、测试API网关

网关作为流量的入口&#xff0c;功能包括路由转发、权限校验、限流控制等 Route(路由)&#xff1a;包含独一无二的路由id、目的地的URL、断言集合、过滤器集合&#xff0c;断言用来判断 路由是否能到达目的地URL Predicats(断言)&#xff1a;用来判断路由是否能到达目的地URL…

探索三维世界:从Hello World开始的Three.js入门之旅

探索三维世界&#xff1a;从Hello World开始的Three.js入门之旅1、什么是Three.Js2、前要准备工作3、Hello World3.1、引入three3.2、创建场景3.3、创建相机3.4、渲染器3.5、创建物体3.6、渲染3.7、让正方体“动”起来3.8、手动控制正方体的运动3.9、坐标轴辅助器1、什么是Thre…

硬件语言Verilog HDL牛客刷题day07 计数器与存储器部分

1.VL50 简易秒表 1.题目&#xff1a; 请编写一个模块&#xff0c;实现简易秒表的功能&#xff1a;具有两个输出&#xff0c;当输出端口second从1-60循环计数&#xff0c;每当second计数到60&#xff0c;输出端口minute加一&#xff0c;一直到minute60&#xff0c;暂停计数。 …
最新文章