每日做题总结——day01

news2024/12/26 0:17:54

目录

选择题

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.coloradmin.cn/o/425466.html

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

相关文章

react face to face

React面试题 创建一个react项目 1.全局安装create-react-app npm install -g create-react-app 2.创建项目 create-react-app myapp 3.局部安装&#xff0c;可以直接用npx npx create-react-app myapp 4.进入文件夹 cd myapp 5.启用项目 npm start&#xff08;开发模式下运行&…

浅谈DNS-rebinding

为啥突然要总结一下这个很老的知识点&#xff0c;我也不知道&#xff0c;可能太菜了&#xff0c;闲下来总得学点什么~ DNS Rebinding 0x01 攻击简介 DNS Rebinding也叫做DNS重绑定攻击或者DNS重定向攻击。在这种攻击中&#xff0c;恶意网页会导致访问者运行客户端脚本&#xff…

springboot-参数校验

SpringBoot 中使用 Valid 注解 Exception 全局处理器优雅处理参数验证 注解Valid的主要作用是用于数据效验&#xff0c;可以在定义的实体中的属性上&#xff0c;添加不同的注解来完成不同的校验规则。Controller类中在参数中添加Valid注解来开启效验功能Valid配合 Spring 会抛…

2023年4月10日下午总结和近日感悟

技术和钱 人生&#xff0c;活到现阶段&#xff0c;已于一月前&#xff0c;深感技术就是这么回事&#xff0c;不再像以前那样为学习某样东西而不问来由&#xff0c;闷头去学&#xff08;也许是因为即将步入下一个人生阶段&#xff09;。虽然&#xff0c;乐于也想去接受新技术&a…

centos7下基于nginx+uwsgi部署Django项目

文章目录一&#xff1a;基础环境介绍&#xff1a;二&#xff1a;部署环境安装配置&#xff1a;1.基础依赖环境安装2.安装wegt&#xff0c;vim&#xff0c;unzip等必须命令3.安装python与pip&#xff08;或者python多版本管理工具pyenv等&#xff09;4.安装nginx5.安装uwsgi三&a…

json和CMake简单入门

Json 介绍 Json是一种轻量级的数据交换格式&#xff08;也叫数据序列化方式&#xff09;。Json采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 Json 成为理想的数据交换语言。 易于人阅读和编写&#xff0c;同时也易于机器解析和生成&#xff…

Binder基本知识

1&#xff1a;IPC 原理 从进程角度来看 IPC 机制 每个 Android 的进程&#xff0c;只能运行在自己进程所拥有的虚拟地址空间。对应一个4GB 的虚拟地址空间&#xff0c;其中 3GB 是用户空间&#xff0c;1GB 是内核空间&#xff0c;当然内核空间的大小是可以通过参数配置调整的…

网络安全之密码学

目录 密码学 定义 密码的分类 对称加密 非对称加密 对称算法与非对称算法的优缺点 最佳解决办法 --- 用非对称加密算法加密对称加密算法的密钥 非对称加密如何解决对称加密的困境 密钥传输风险 密码管理难 常见算法 对称算法 非对称算法 完整性与身份认证最佳解决…

优维低代码:定制构件的打包及部署

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 连载…

用Python写一个BMI计算代码

有粉丝问我怎么写一个BMI算法&#xff0c;安排 height float(input("请输入身高&#xff08;米&#xff09;: ")) weight float(input("请输入体重&#xff08;千克&#xff09;: ")) 计算BMI bmi weight / (height ** 2) 显示结果 print("您的…

MySQL8.0.32安装以及环境配置

文章目录一、安装MySQL二、错误集1. 如果操作失误&#xff0c;可以重新安装一、安装MySQL 下载MySQL的社区版的压缩包&#xff1a;https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.32-winx64.zip 将压缩包解压到你要安装的目录中 将对应的安装路径添加到环境变量中…

Java面试核心知识点梳理(二)——Java集合

文章目录前言1. List1.1 ArrayList&#xff08;数组&#xff09;1.2 Vector&#xff08;数组、线程安全&#xff09;1.3 LinkedList&#xff08;链表&#xff09;2. Set2.1 HashSet&#xff08;Hash表&#xff09;2.2 TreeSet&#xff08;二叉树&#xff09;2.3 LinkHashSet&am…

3分钟通过日志定位bug,这个技能测试人必须会

♥ 前 言 软件开发中通过日志记录程序的运行情况是一个开发的好习惯&#xff0c;对于错误排查和系统运维都有很大帮助。 Python 标准库自带了强大的 logging 日志模块&#xff0c;在各种 python 模块中得到广泛应用。 一、简单使用 1. 入门小案例 import logging logging.ba…

国内Google翻译失效的解决方法(MAC/WIN)

Google宣布停止在中国大陆的翻译服务&#xff0c;原因是&#xff1a;使用率低&#xff1f;&#xff1f;&#xff0c;这导致Chrome浏览器网页翻译失效。对于一些使用Chrome&#xff0c;经常鼠标下一秒就在大洋彼岸扒拉资料&#xff0c;且英语不太好的同学来说变得非常难受。为此…

【软考中级·网络工程师】校验码差错控制

差错控制&#x1f349; 无论通信系统如何可靠&#xff0c;都不能做到完美无缺。因此&#xff0c;必须考虑怎样发现和纠正信号传输重的差错。通信过程中出现的差错大致可以分为两类&#xff1a; 一类是由热噪声引起的随机错误&#xff1b;热噪声&#xff1a;一种由电子的热运动…

基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升

专题一 空间数据获取与制图 1.1 软件安装与应用讲解 1.2 空间数据介绍 1.3海量空间数据下载 1.4 ArcGIS软件快速入门 1.5 Geodatabase地理数据库 ​ 专题二 ArcGIS专题地图制作 2.1专题地图制作规范 2.2 空间数据的准备与处理 2.3 空间数据可视化&#xff1a;地图符号…

无头盔PICO-unity开发日记3(UI按钮点击)

目录 1.UI界面加入组件 2.加入xr输入模块 3.设置光线投射遮罩 结果&#xff1a; 前提&#xff1a;做好一个ui界面 1.UI界面加入组件 画布加跟踪设备图形光线投射仪&#xff08;tracked device graphic raycaster&#xff09; 允许画布被追踪设备操纵 2.加入xr输入模块 sys…

C++ --模拟实现搜索二叉树

文章目录#搜索二叉树1. 搜索二叉树特点2. 操作分析2.0 结点结构2.1 插入2.2 升序查看2.3 查找2.4 删除2.5 前序拷贝构造3. 完整代码4. 时间复杂度分析5. 简单应用5.1 字典搜索5.2 统计次数#搜索二叉树 1. 搜索二叉树特点 若它的左子树不为空&#xff0c;则左子树上所有节点的…

Dockerfile及新型容器镜像构建技术

文章目录一、容器镜像分类1、操作系统类2、应用类二、容器镜像获取方法1、在dockerhub直接下载2、把操作系统中文件系统打包为容器镜像3、把正在运行的容器打包为容器镜像&#xff0c;即docker commit4、通过dockerfile实现容器镜像的自定义以及生成三、dockerfile1、dockerfil…

数据库管理系统PostgreSQL部署安装完整教程

PostgreSQL是一个开源的关系型数据库管理系统&#xff0c;它支持大量的数据类型和复杂的查询语言&#xff0c;可以用于各种应用程序。它是一个高性能的数据库&#xff0c;可以处理大量的数据&#xff0c;并且具有良好的可扩展性和可靠性。 目录 一.Linux系统安装PostgresSQL&a…