【C++笔试强训】第六天

选择题

1.image-20230327105604281

解析:十进制转换为八进制就是不断的除8,取余数。十进制转换成其他进制的数就是除以进制,取余。

image-20230326213337606

image-20230327105620262

解析:注意printf的转换,%%只会打印一个%,所以选A。

image-20230327105633260

解析:由于()的原因p先和*结合,说明p是一个指针,char (*p)[16]是一个数组指针,指向一个char类型的字符数组,该数组中有16个元素。

image-20230327105642918

解析:a表示首元素的地址,对与二维数组,首元素是第0行数组的地址。明显D选项还是一个地址。

image-20230327105653485

解析:define是直接替换其所在位置就行,替换之后正常计算就可以,注意优先级就可以。

image-20230327105706744

解析:image-20230327082926796

image-20230327105720956

解析:free之后不会自动的把指针变量制成NULL,需要手动处理。

image-20230327105735195

解析:题目中为二维数组,数组名表示数组首元素的地址,a是二维数组数组名,表示数组首元素的地址,在二维数组中,数组首元素的地址即第一行的地址,第一行的数组名可以用a[0]表示;*(a+1)可以表示成*(&a[0]+1),&a[0]是int(*)[5]类型,+1之后到二维数组的第二行,所以*(a+1)就是a[1],a[1]就是第二行数组名,也表示第二行首元素的地址&a[1][0];+2是向后移动2个int*类型的大小。所以选B。

image-20230327105746631

解析:64位编译器下指针大小为8个字节大小,所以a4占8个字节大小;a1(0 ~ 7),a2(8~ 9),浪费(10 ~ 11),a3(12~ 15),a4(16~23),共24个字节的大小,也是最大对齐数8的整型倍。选A。

解析:本题考查递归,递归类题目可以通过画图来解决。

image-20230327085309765

编程题

1.不要二

image-20230326103836682

解析:这里理解输入顺序为行、列。

( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) == 4
1 + 3 = 4
3 + 1 = 4
2 + 2 = 4
0 + 4 = 4
4 + 0 = 4
前三种情况都不存在
只能是x1=x2 (y1-y2) = 2
或者 y1=y2 x1-x2 = 2
假设数组全是1,经过上面的公式变换之后
1 1         1  1 
1 1   -->   1  1
1 1         0  0
也就是v[i][j]和v[i+2][j]、v[i][j]和v[i][j+2] 只能有一个有蛋糕
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int row,col;//row行,col列
    cin >> row >> col;
    vector<vector<int>> a; //设定一个二维数组
    a.resize(row);//定义行数
    for(int i = 0; i < row; i++) //一行一行的进行初始化
    {
        a[i].resize(col,1);//全部初始化为1
    }
    int count = 0;
    for(int i = 0; i < row; i++)
    {
        for(int j = 0; j < col; j++)
        {
            if(a[i][j] == 1) //判单是否为1
                count++;
            if(i + 2 < row) //判断是否在二维数组之内
                a[i+2][j] = 0;
            if(j + 2 < col) //判断是否在二维数组之内
                a[i][j+2] = 0;
        }
    }
    cout << count;
    return 0;
}
// 64 位输出请用 printf("%lld")

答案解析:

本题看起来很难,实际是一个中等难度的题。本题如果没记错,是一个往年网易的笔试题,大家可以看到大厂的题的难度。
本题的重点是要读懂题意,并且需要多读两遍,才能读懂,本题本质就是在二维数组中每个坐标去放蛋糕,一个坐标位置放了蛋糕,跟他欧几里得距离为2的位置不能放蛋糕,这个就是关键点。对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为: ( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根 。也就是说:如果(x1,y1)放了蛋糕,则满足 ( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) == 4的(x2,y2)不能放蛋糕。
( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) == 4看起来是一个无解的表达式。
但是可以进行加法表达式分解:
1+3=4
3+1=4
2+2=4
0+4=4
4+0=4
仔细分析前三个表达式是不可能的,因为(x1-x2) * (x1-x2)表达式结果不能等于2或3。也就是说( (x1-x2) * (x1-x2) 和(y1-y2) * (y1-y2) )两个表达式一个等于0,一个等于4.可以看出:假设放蛋糕的位置是(x1,y1),则不能放蛋糕的位置(x2,y2),满足x1==x2,y1-y2==2或者x1-x2==2,y1==y2
【解题思路】:
仔细读理解了上面的题目解读,本题就非常简单了,使用vector<vector>定义一个二维数组,resize开空间并初始化,每个位置初始化为1,表示当蛋糕,a[i][j]位置放蛋糕,则可以标记处a[i][j+2]和a[i+1][j]位置不能放蛋糕,遍历一遍二维数组,标记处不能放蛋糕的位置,统计也就统计出了当蛋糕的位置数。

// 直接暴力计算,默认所有蛋糕的位置标记成1,不能放的地方标记成0
// 1 1 0 0 1 1
// 1 1 0 0 1 1
// 0 0 1 1 0 0
// 0 0 1 1 0 0
#include<iostream>
#include<vector>
using namespace std;
int main()
{
    int w,h,res = 0;
    cin >> w >> h;//w行,h列
    vector<vector<int>> a;
    a.resize(w);
    for(auto& e : a)
        e.resize(h, 1);
    for(int i=0;i<w;i++)
    {
        for(int j=0;j<h;j++)
        {
            if(a[i][j]==1)
            {
                res++;
                // 标记不能放蛋糕的位置
            	if((i+2)<w)
                    a[i+2][j] = 0;
                if((j+2)<h)
                    a[i][j+2] = 0;
            }
        }
    }
    cout << res;
    return 0;
}

2.把字符串转换成整数

image-20230326103827036

解析:先检查字符串中是否有除数字字符及'-'\'+'外的其他字符,如果有直接返回;如果没有,要先检查首个字符是否为'+'、'-',考虑如果为'-',需要设立一个flag进行标记,当第一个字符为'+'、'-'时,先忽视,对下一个位置开始的数字串进行处理,-'0'得到对应的数字,每次*10加上新的数字……在最后检查标记位,如果为true,说明第一个字符为'-',需要进行num = 0 - num处理,得到结果。

class Solution {
  public:
    bool IsWord(string str) { //检查字符串中是否有字母
        int i = 0;
        for (i = 1; i < str.size(); i++) {
            if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')) {
                return false;
            }
        }
        return true;
    }
    int StrToInt(string str) {
        int i = 0;
        /*if (!IsWord(str)) {
            cout << "0";
            return 0;
        }*/
        for (i = 1; i < str.size();i++) {//从1开始检查字符串中受否有其他字符
            if ((str[i] < '0' ) || (str[i] > '9')) {
                cout << "0";
                return 0;
            }
        }
        i = 0;
        bool flag = false;//标记其首字符为+或者-
        if (str[0] == '-') {
            flag = true;//如果首字符为-则改变flag,同时i++
            i++;
        }
        if (str[0] == '+') {
            i++;//如果首字符为+不改变flag,但是i++
        }
        long long num = 0;
        //起始条件不能确定,因为不确定str[0]是否是+或者-还是直接数字开头
        for (i; i < str.size(); i++) {
            int nums = str[i] - '0';
            num = num * 10 + nums;
        }
        if (flag) {
            num = 0 - num;
        }
        cout << num;
        return num;
    }
};

答案解析:解题思路非常简单,就是上次计算的结果*10,相当于10进制进位,然后加当前位的值。
例如:“123”转换的结果是
sum=0 sum*10+1->1 sum*10+2->12 sum*10+3->123
本题的关键是要处理几个关键边界条件:

  1. 空字符串
  2. 正负号处理
  3. 数字串中存在非法字符
class Solution {
public:
int StrToInt(string str)
{
    if(str.empty())
        return 0;
    int symbol = 1;
    if(str[0] == '-') //处理负号
    {
        symbol = -1;
        str[0] = '0'; //这里是字符'0',不是0
    }
    else if(str[0] == '+') //处理正号
    {
        symbol = 1;
        str[0] = '0';
    }
    int sum = 0;
    for(int i=0;i<str.size();++i)
    {
        if(str[i] < '0' || str[i] > '9')
        {
        }
        sum = sum *10 + str[i] - '0';
    }
    return symbol * sum;
}
};

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

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

相关文章

某面试官分享经验:看求职者第一眼,开口说第一句话,面试结果就差不多定了,准确率高达90%以上...

我们以前分享过许多经验&#xff0c;但大多是站在打工人的视角上&#xff0c;今天给大家带来一个面试官的经验&#xff1a;1. 看求职者第一眼&#xff0c;开口说第一句话&#xff0c;面试结果就差不多定了&#xff0c;准确率高达90%以上。2. 绝不考八股文&#xff0c;如果问技术…

docker安装MongoBD(超详细)

一、安装docker 推荐文章&#xff1a;https://blog.csdn.net/Sumuxi9797926/article/details/127313307?spm1001.2014.3001.5502 二、创建主机挂载配置目录 data目录存放mongodb数据库文件&#xff0c;删除重启容器不会丢失 mkdir -p /docker/mongodb/data && cd …

马云回国,首谈ChatGPT

马云今天回国了&#xff0c;这是一个备受关注的消息。 作为中国最具代表性的企业家之一&#xff0c;马云在过去的二十多年里&#xff0c;带领阿里巴巴从一个小小的创业公司&#xff0c;发展成为全球最大的电商平台之一&#xff0c;同时也推动了中国互联网行业的发展。 他的回…

Redis高可用之持久化

目录 一、高可用 什么是高可用 二、Redis持久化 持久化功能 RDB持久化 触发条件 bgsave执行流程 AOF持久化 执行流程 命令追加 文件写入和文件同步 文件重写 文件重写流程 三、RDB和AOF的优缺点 RDB持久化的优缺点 优点 缺点 AOF持久化优缺点 四、Redis性能管…

修改Hive运⾏⽇志的存放位置

默认情况下&#xff0c;Hive的运⾏⽇志存放在/tmp/root/hive.log ⽬录下&#xff08;root是当前⽤户登录 ⽤户名&#xff09;。修改hive的⽇志存放到/export/servers/hive/logs⽬录下。1. cd /export/server/hive/conf/,找到下面的文件修改/export/server/hive/conf/hive-log4j…

STM32——毕设远程室内灯光控制系统

运程室内灯光控制系统一、功能设计二、硬件选择三、按键说明四、产品主界面展示一、功能设计 本毕设以STM32 F103C8T6为主控核心板智能灯光控制系统,开发的简单易行的智能灯光控制系统,由智能手机通过蓝牙或无线与单片机系统的蓝牙或无线模块进行通信控制单片机板子上的led进行…

Fail-Fast机制和ConcurrentModificationException并发修改异常

目录说明Fail-Fast机制Fail-Fast机制的理解如何解决Fail-Fast错误机制的问题说明 Fail-Fast机制和ConcurrentModificationException并发修改异常是我们在编写代码的时候经常遇到的问题和异常&#xff0c;我们需要搞清楚这个机制是什么东西并且为什么会抛出这个异常&#xff0c;…

【新】(2023Q2模拟题JAVA)华为OD机试 - 统计差异值大于相似值二元组个数

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:统计差异值大于相似值二元组个…

尚硅谷大数据技术Scala教程-笔记01【Scala课程简介、Scala入门、变量和数据类型、运算符、流程控制】

视频地址&#xff1a;尚硅谷大数据技术之Scala入门到精通教程&#xff08;小白快速上手scala&#xff09;_哔哩哔哩_bilibili 尚硅谷大数据技术Scala教程-笔记01【Scala课程简介、Scala入门、变量和数据类型、运算符、流程控制】尚硅谷大数据技术Scala教程-笔记02【函数式编程】…

【求助贴】临危受命,如何救火做到一半的项目?

最近分享了一个关于被临时拉去救火&#xff0c;项目如何起死回生的小视频&#xff0c;没想到引起了大家的共鸣&#xff0c;吐槽了自己的惨痛经历并强烈要求出一个应对策略的详细教程。这也是我职场升级打怪路上一个具有代表性的绊脚石&#xff0c;我当时也请教了一些资深的项目…

1978-2021年全国及各省农业总产值数据

1978-2021年全国及31省农业总产值数据 1978-2021年全国及31省农业总产值数据 1、时间&#xff1a;1978-2021年 2、范围&#xff1a;31省 3、来源&#xff1a;统计NJ、各省NJ、 4、缺失情况&#xff1a;无缺失 5、指标解释说明&#xff1a; 农业总产值是一定时期&#x…

Keil5----跳转定义和查找功能

一、Keil5----跳转定义 跳转定义 鼠标左键点击要查找的变量 方法1&#xff1a; 点击鼠标右键&#xff0c;功能栏中有跳转定义的选项。 方法2&#xff1a; 按快捷键 F12 具体操作如下图所示&#xff1a; 跳转结果 二、Keil5----查找功能 1. 查找功能 鼠标左键点击要查找的变…

数据在内存中的存储(深度剖析)

目录 1.数据类型介绍 1.1类型分类 2.整形在内存中的存储 2.1原码&#xff0c;反码&#xff0c;补码 2.2大小端介绍 2.3练习 3.浮点型在内存中的存储 3.1浮点数存储规则 引入&#xff1a; 有正负的数据可以存放在有符号的变量中 只有正数的数据可以存放在无符号的变量…

Eolink Apikit 创建/生成 API 文档

在 API 研发管理产品中&#xff0c;几乎所有的协作工作都是围绕着 API 文档进行的。 我们在接触了大量的客户后发现&#xff0c;采用 文档驱动 的协作模式会比先开发、后维护文档的方式更好&#xff0c;团队协作效率和产品质量都能得到提高。因此我们建议您尝试基于文档来进行工…

前脚我的 GPT4 被封,后脚收到了文心一言的邀请账号

大家好&#xff0c;我是二哥呀。 一早醒来&#xff0c;我的 ChatGPT Plus 账号就惨遭封禁&#xff0c;很不幸&#xff0c;我刚冲的 Plus 会员&#xff0c;用了不到一周的时间&#xff08;&#x1f62d;&#xff09;。 我没用亚洲的IP&#xff0c;所以网上传的那些不使用亚洲IP…

Python图像处理【11】利用反卷积执行图像去模糊

利用反卷积执行图像去模糊0. 前言1. 图像模糊检测1.1 拉普拉斯 (Laplacian) 方差阈值1.2 使用 OpenCV 执行模糊检测2. 使用 SimpleITK 反卷积滤波器实现非盲去模糊2.1 去模糊分类2.2 实现非盲去模糊3. 使用 scikit-image 执行非盲去模糊小结系列链接0. 前言 我们已经知道可以使…

c++11 标准模板(STL)(std::unordered_multimap)(三)

定义于头文件 <unordered_map> template< class Key, class T, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator< std::pair<const Key, T> > > class unordered…

2023年的深度学习入门指南(2) - 给openai API写前端

2023年的深度学习入门指南(2) - 给openai API写前端 上一篇我们说了&#xff0c;目前的大规模预训练模型技术还避免不了回答问题时出现低级错误。 但是其实&#xff0c;人类犯的逻辑错误也是层出不穷。 比如&#xff0c;有人就认为要想学好chatgpt&#xff0c;就要先学好Pyth…

【AI JUST AI】Stable Disffusion | 配合Chrome插件,与Notion API完美联动

【AI JUST AI】Stable Disffusion | 配合Chrome插件&#xff0c;与Notion API完美联动第一步、Stable Diffusion 链接 CMS开发Chrome插件在合适的位置增加一个发送至Notion的按钮编写按钮的逻辑部分使用GitHub作为图床图片上传 API第二步&#xff0c;使用Chat GPT优化样式Stabl…

超详细WindowsJDK1.8与JDK11版本切换教程

文章目录一、JDK生效原理二、安装配置JDK11三、切换JDK11版本四、查看切换JDK11版本是否成功五、再次切换至JDK8版本六、查看切换JDK8版本是否成功一、JDK生效原理 想必大家都在为如何流畅的切换JDK版本问题而来&#xff0c;那么在此篇文章开始之前&#xff0c;首先我们来思考一…