【C++笔试强训】第六天 谁借莪1个温暖的怀抱¢ 2024-04-20 06:09 76阅读 0赞 > **?C++笔试强训** > > -------------------- > > * **博客主页:**[一起去看日落吗][Link 1] > * **分享博主的C++刷题日常,大家一起学习** > * **`博主的能力有限,出现错误希望大家不吝赐教`** > * **分享给大家一句我很喜欢的话:夜色难免微凉,前方必有曙光** ?。 > > -------------------- > > ![在这里插入图片描述][047d8ad26e314dc7bc7aa19a6ce9ccb0.jpeg_pic_center] ? ? -------------------- ## 选择题 ## ### ? 第一题 ### 十进制变量i的值为100,那么八进制的变量i的值为() A 146 B 148 C 144 D 142 这道题非常简单,就是十进制转八进制,和十进制转二进制一样 ![请添加图片描述][0a648e05a6b94ea18f2913d488a00ede.png] > **`这道题的答案是C`** -------------------- ### ? 第二题 ### 执行下面语句后的输出为 int I=1; if(I<=0) printf("****\n") ; else printf("%%%%\n"); A %% B \*\*\*\* C 有语法错,不能正确执行 D %%%% 这道题一看就知道是打印else的结果,但是这里printf打印的内容有点特殊 如果我们需要输出%,则需要写入双% ![请添加图片描述][7256698a11c741cf87f4c6d321e501a8.png] > **`这道题的答案是A`** -------------------- ### ? 第三题 ### 对于下面的C语言声明描述正确的一项是() char (*p)[16] A p是长度为16的字符指针数组 B p是包含16个字符的字符串 C p是指向长度为16的字符数组的指针 D p是长度为16的字符数组 这道题主要是考验指针和数组的理解 ![请添加图片描述][9e76079516af46ad8f804086e7c3c767.png] > **`这道题的答案是C`** -------------------- ### ? 第四题 ### 数组a的定义语句为“float a\[3\]\[4\];”,下列()是对数组元素不正确的引用方法 A a\[i\]\[j\] B \*(a\[i\]+j) C *(*(a+i)+j) D *(a+i*4+j) 这道题主要是考验数组转换型式 这里我们用一维数组来举例 ![请添加图片描述][846ecd498fd7478c8f9d2120c573bfb0.png] A 是对数组最直接的访问方式 B 把二维数组可以理解成a中的每个元素都是一个一维数组 ![请添加图片描述][4391da230e59444998f27e55e6bb217e.png] C 实际上和B是等价的,一样的转换方式 D a表示数组首元素地址,i\*4的应该是想拿第i行的,但实际含义说不通,并不是这样取的 > **`这道题的答案是D`** -------------------- ### ? 第五题 ### 下面程序的输出结果是\_\_\_\_\_\_\_\_\_\_。 #include < iostream.h> #define SQR(A) A*A void main() { int x=6,y=3,z=2; x/=SQR(y+z)/SQR(y+z); cout< < x< < endl; } A 5 B 6 C 1 D 0 我们的程序如果想运行起来会经历 预处理 编译 汇编 链接 这道题需要注意的是不要用我们常用的数学逻辑来分析,我们需要全部展开才能计算,不能直接进行计算 ![请添加图片描述][c540840068854e5db6dffe50ea28fbdd.png] > **`这道题的答案是D`** -------------------- ### ? 第六题 ### 当n=5时,下列函数的返回值是() int foo(int n){ if(n<2){ return n; } else return 2*foo(n-1)+foo(n-2); } A 5 B 11 C 29 D 10 这道题是考察递归算法的理解,我们需要逐步拆解分析,题目并不难只需要耐心分析即可![请添加图片描述][f9d4fb215e9a40168ada28fc6ad2821a.png] > **`这道题的答案是C`** -------------------- ### ? 第七题 ### 以下对C语言的”指针“描述不正确的是() A 32位系统下任何类型指针的长度都是4个字节 B 指针的数据类型声明的是指针实际指向内容的数据类型 C 野指针是指向未分配或者已释放的内存地址 D 当使用free释放掉一个指针内容后,指针变量的值被置为NULL 这道题在笔试强训第一天的时候有遇到过 A 指针的长度指的是指针占的大小,32位是4字节,如果是64位就是8字节 B 假设int\* p ;p将来指向int类型的空间,这句话就是这个含义 C 野指针即你指向的空间的值你不能用,C没有问题 D free只是将指向的内存空间释放掉,不会将内存置为空 > **`这道题的正确答案是D`** -------------------- ### ? 第八题 ### 数组定义为”int a\[4\]\[5\];”, 引用”\*(a+1)+2″表示()(从第0行开始) A a\[1\]\[0\]+2 B a数组第1行第2列元素的地址 C a\[0\]\[1\]+2 D a数组第1行第2列元素的值 这里和上面的第四题类似 实际上就是一维数组的第二个值 ![请添加图片描述][56754519223f490b8b9e0c40b894dc71.png] > **`这道题的正确答案是B`** -------------------- ### ? 第九题 ### 有一个如下的结构体: struct A{ long a1; short a2; int a3; int *a4; }; 请问在64位编译器下用sizeof(struct A)计算出的大小是多少() A 24 B 28 C 16 D 18 这又是道结构体内存大小的题目,最近基本每天都能遇到 我们再来看看内存对齐的规则,这里还需要注意的是在64位下的结构体大小 ![请添加图片描述][f3fc9f3f07b240ceacd87cb25950cdaf.png] ![请添加图片描述][e95d3cc4954b452b8c34207a4e0a42a4.png] ![请添加图片描述][5440404336cb4bb7bd65ed23201e6b9d.png] > **`这道题的答案是A`** -------------------- ### ? 第十题 ### #include <iostream> using namespace std; int f(int n){ if (n==1) return 1; else return (f(n-1)+n*n*n); } int main(){ int s=f(3); cout<<s<<endl; return 0; } 运行结果是() A 8 B 9 C 27 D 36 这道题还是考察递归关系的理解程度,我们继续按照上面的方式进行计算,一步一步拆开来分析![请添加图片描述][b1dedc2575fe456180cc17e6cc81b0f9.png] -------------------- ## 编程题 ## ### ?第一题 ### 链接:[不要二][Link 2] ![请添加图片描述][cc13d54c9f894aa9851089211bcf60c8.png] * 题目解析: 本题看起来很难,实际是一个中等难度的题。本题如果没记错,是一个往年网易的笔试题,大家可以看到大厂的题的难度。 本题的重点是要读懂题意,并且需要多读两遍,才能读懂,本题本质就是在二维数组中每个坐标去放蛋糕,一个坐标位置放了蛋糕,跟他欧几里得距离为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\]位置不能放蛋糕,遍历一遍二维数组,标记处不能放蛋糕的位置,统计也就统计出了当蛋糕的位置数。 * 代码演示: #include <iostream> #include <vector> using namespace std; int main() { int w,h,count = 0; cin >> 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) { count++; if(i+2 < w) { a[i+2][j] = 0; } if(j+2 < h) { a[i][j+2] = 0; } } } } cout << count << endl; } -------------------- ### ?第二题 ### 链接:[把字符串转换为整数][Link 3] ![请添加图片描述][2e16b2a2593046359fa5eaa61cd74a33.png] * 题目解析 本题本质是模拟实现实现C库函数atoi,不过参数给的string对象 * 解题思路 解题思路非常简单,就是上次计算的结果\*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 flag = 1; if(str[0] == '-') { flag = -1; str[0] = '0'; } else if(str[0] == '+') { flag = 1; str[0] = '0'; } int sum = 0; for(int i = 0;i < str.size();i++) { if(str[i] < '0' || str[i] > '9') { sum = 0; break; } sum = sum * 10 + str[i] - '0'; } return flag * sum; } }; -------------------- [Link 1]: https://blog.csdn.net/m0_60338933?type=blog [047d8ad26e314dc7bc7aa19a6ce9ccb0.jpeg_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/eabdaf6358304865b7d8f42aae574805.jpeg [0a648e05a6b94ea18f2913d488a00ede.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/8fa801b6cbda4c34bf619bd693a34dd8.png [7256698a11c741cf87f4c6d321e501a8.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/30a66677361f4ca79af7785c2a0466d7.png [9e76079516af46ad8f804086e7c3c767.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/e1f6e6b4164c485eb5b6560fa5b939a0.png [846ecd498fd7478c8f9d2120c573bfb0.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/d8eeb4cf315c4354a3e8f321d54c29ff.png [4391da230e59444998f27e55e6bb217e.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/574bed3b2ce249b897c132601e94a550.png [c540840068854e5db6dffe50ea28fbdd.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/a7eac365918648b5a0cb0b58975cc2ca.png [f9d4fb215e9a40168ada28fc6ad2821a.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/cc526fbb780f403fb00ef454a03b617d.png [56754519223f490b8b9e0c40b894dc71.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/25cf042728624be29918eb64e2bb7c97.png [f3fc9f3f07b240ceacd87cb25950cdaf.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/90cc4ec4c03e4c1495b0b0d3bb11d25f.png [e95d3cc4954b452b8c34207a4e0a42a4.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/13c88456f52f4f43a5e9be525243f0ad.png [5440404336cb4bb7bd65ed23201e6b9d.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/15e2350cb72d464fb65ed9fdf38f3575.png [b1dedc2575fe456180cc17e6cc81b0f9.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/c0356f2813f54f46b6b2713c23d08cb3.png [Link 2]: https://www.nowcoder.com/practice/1183548cd48446b38da501e58d5944eb?tpId=85&&tqId=29840&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking [cc13d54c9f894aa9851089211bcf60c8.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/281f151f96994f5692ef0991c95d5809.png [Link 3]: https://www.nowcoder.com/practice/1277c681251b4372bdef344468e4f26e?tpId=13&&tqId=11202&rp=6&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking [2e16b2a2593046359fa5eaa61cd74a33.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/5d16d9eb2ba8480191c472c523622e4b.png
还没有评论,来说两句吧...