【C++刷题集】-- day1

news/2024/10/17 20:20:12/

目录

选择题

单选

编程题

组队竞赛⭐

【题目解析】

【解题思路】(排序 + 贪心)

删除公共字符⭐

【题目解析】

【解题思路】(哈希映射)


选择题

单选

1、 以下for循环的执行次数是  ( )
for(int x = 0, y = 0; (y = 123) && (x < 4); x++);
是无限循环
循环次数不定
4次
3次
正确答案:

解析:

  • 初始化:为逗号表达式式,从左到右执行。
  • 条件判断:为逻辑与需同真为真,y = 123赋值表达式,返回值为所赋的值 (y = 123) && (x < 4) -> (123恒为真) && (x < 4)。
  • 调增x:0 -> 1 -> 2 -> 3。
  • 循环语句:空语句。

----------------------------------------------

2、 以下程序的运行结果是  ( )
#include <stdio.h>
int main(void) {printf("%s , %5.3s\n", "computer", "computer");return 0;
}
computer , puter
computer ,    com
computer , computer
computer , compu.ter
正确答案:

解析:

  • %s遇见 '\0' 就停止打印。
  • %m.ns
    • m:输出字符串的宽度。
    • n:左起截取目标字符串n个字符。
      • 字符串长度 > n > m:此时m的作用失效,是只受n的控制。
      • m > n:是右对齐补空格。
      • n > 字符串长度:作用与%s一样。
----------------------------------------------

3、下列main()函数执行后的结果为 ( )

int func() {int i, j, k = 0;for (i = 0, j = -1; j = 0; i++, j++) {k++;}return k;
}
int main() {cout << (func());return 0;
}
-1
0
1
2
正确答案:

解析:

  • 初始化:为逗号表达式式,从左到右执行。
  • 条件判断:j = 0赋值表达式,返回值为所赋的值0恒为假。
  • 调增x:不执行。
  • 循环语句:不执行。

----------------------------------------------
4、
下面程序输出是什么?
#include <stdio.h>
int main()
{int a = 1, b = 2, c = 3, d = 0;if (a == 1 && b++ == 2)if (b != 2 || c-- != 3)printf("%d,%d,%d\n", a, b, c);elseprintf("%d,%d,%d\n", a, b, c);elseprintf("%d,%d,%d\n", a, b, c);return 0;
}
1,2,3
1,3,2
3,2,1
1,3,3
正确答案:

解析:

后置++、后置--:先使用再++ / --。如:b++ == 2,是先进行b == 2的判断,判断完再进行++。

前置++、前置--:先++ / --再使用。如:++b == 2,是先进行++,++完再进行b == 2的判断。

||逻辑判断:有真即真,所以第一个为真,第二个的状态就不重要了,于是编译器会优化,不执行第二个(短路原则)

&&逻辑判断:有假即假,所以第一个为假,第二个的状态就不重要了,于是编译器会优化,不执行第二个(短路原则)

----------------------------------------------
5、 若有定义语句:
int a=10; 
double b=3.14; 
则表达式 'A'+a+b 值的类型是  ( )
char
int
double
float
正确答案:

解析:

        不同类型的表达式进行计算的时候,会有自动提升的过程,也就是说表示范围小的类型会自动提升为表示范围大的类型。如上:char类型 + int类型 + double类型,最终经过整形提升和算数转换,最终提升类型double类型。

表达式求值( 整形提升 + 算术转换 )_川入的博客-CSDN博客

----------------------------------------------
6、
int p[][4] = {{1}, {3, 2}, {4, 5, 6}, {0}};

中,p[1][2]的值是 ( )

1
0
6
2
正确答案:

解析:

        二维数组:行可省略,列不可省略,未进行初始化部分默认为0。

----------------------------------------------
7、 选择表达式 11|10 的结果 ( 本题数值均为十进制 )  ( )
11
10
8
2
正确答案:

解析:

11:0000 1011

10:0000 1010

11 | 10:0000 1011 = 11

( | 按位或:有1则1;& 按位或:有0则0)

----------------------------------------------
8、
int fun(int a) {a ^= (1 << 5) - 1;return a;
}
fun(21)运行结果是  ( )
10
5
3
8
正确答案:

解析:

a ^= b:a = a ^ b。

1 << 5:0010 0000 = 32 = 0001 1111。

a = (21)^(31):(0001 0101) ^ ( 0001 1111) = 1010 = 10。

^按位异或:异为1,同为0

----------------------------------------------
9、 若有定义语句:
int year=1009,*p=&year;
以下不能使变量 year 中的值增至 1010 的语句是  ( )
*p+=1;
(*p)++;
++(*p);
*p++;
正确答案:

解析:

优先级:( ) > 后置++ > 前置++ > * > +=

操作符优先级(详细说明+表格+问题表达式)_川入的博客-CSDN博客

----------------------------------------------
10、 下面关于"指针"的描述不正确的是  ( )
当使用free释放掉一个指针内容后,指针变量的值被置为NULL。
32位系统下任何类型指针的长度都是4个字节。
指针的数据类型声明的是指针实际指向内容的数据类型。
野指针是指向未分配或者已经释放的内存地址。
正确答案:

解析:

free释放掉一个指针内容后,只是销毁了指针所指向的空间,并不会将指针置NULL,此时指针指向一个被销毁的空间 -- 野指针。

  • 常见的造成野指针的原因:
  1. 定义指针的时候为进行初始化。
  2. free释放掉指针后没有置NULL。
  3. 越界访问。

编程题

组队竞赛⭐

组队竞赛_牛客笔试题_牛客网 (nowcoder.com)


        牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i。现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人。牛牛发现队伍的水平值等于该队伍队员中第二高水平值。
例如:
        一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3
        一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3
        一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2
为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。

【题目解析】

        队伍的水平值等于该队伍队员中第二高水平值,为了所有队伍的水平值总和最大的解法,也就是说每个队伍的第二个值是尽可能大的值所以实际值把最大值放到最右边,最小是放到最左边。

【解题思路】(排序 + 贪心)

  • 排序 + 贪心算法:贪心算法就是每次选值时都选当前能看到的局部最解忧,所以这里的贪心就是保证每组的第二个值取到能选择的最大值就可以,我们每次尽量取最大,而尽量取最大就是最大的次极大。
  • 例如:现在排序后有 1 2 5 5 8 9 ,那么分组为1 8 9 和 2 5 5。

        所以我们再排除最大的情况下取次大。

        于是中间值8最好,而左为小,越小越好。

         贪心算法:只看局部最优解。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {int n = 0;cin >> n;vector<int> val(3*n, 0);for (int i = 0; i < (3 * n); i++) cin >> val[i];// 排序sort(val.begin(), val.end());// 所有队伍的水平值总和最大值uint64_t ret = 0;// 贪心int right = 0;int left = val.size() - 1;for(;right < left; right++){ret += val[left - 1];left -= 2;}cout << ret << endl;return 0;
}

删除公共字符

删除公共字符_牛客题霸_牛客网 (nowcoder.com)


输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”

【题目解析】

        略

【解题思路】(哈希映射)

        如果使用传统的暴力查找方式,滚动两个字符串,效率为O(N^2)太低了,很难让人满意抛弃解法,采用哈希映射更好。

#include <iostream>
#include <string>
#include <vector>
using namespace std;int main() {string str;string sub;// 注意这里不能使用cin接收,因为cin遇到空格就结束了。// 使用string提供的getlinegetline(cin, str);getline(cin, sub);// 使用哈希映射思想统计str中字符的出现vector<int> hashtable(256,0);for(int i = 0; i < sub.size(); i++) hashtable[sub[i]] = 1;// 这里就不采取erase的方式(需要移动),采取利用空间换时间。string str_ret;for(int i = 0; i < str.size(); i++){if(hashtable[str[i]] == 1)continue;str_ret.push_back(str[i]);}cout << str_ret << endl;
}


http://www.ppmy.cn/news/69832.html

相关文章

计算机图形学-GAMES101-7

引言 场景中有很多的三角形&#xff0c;如果实现可见性和遮挡呢&#xff1f;  一个简单的想法是&#xff0c;从远到近画&#xff0c;近处的物体自然会覆盖掉远处的物体&#xff0c;这种画法也叫画家算法。  但是实际绘制中物体的顺序是不容易确定的&#xff0c;比如如下图绘制…

(2)数码管

LED数码管:数码管是一种简单、廉价的显示器&#xff0c;是由多个发光二极管封装在一起组成"8"字器件 51单片机是共阴极连接 74HC245这个芯片有什么作用呢&#xff1f;解&#xff1a;这个芯片被称之为双向数据缓冲器这个芯片的作用&#xff0c;用来进行数据缓冲(提高驱…

java前端程序员职业生涯规划,我来分享一下升职加薪的六大技巧

今天给大家分享一下java前端程序员的职业生涯规划&#xff0c;我把它分成四个阶段。 第一个阶段是你还是一名在校大学生。这个时候一定要好好学习学校的专业技术知识&#xff0c;尤其是C语言、数据结构和算法。然后及时关注你身边名校的这些校园招聘机会&#xff0c;获得一些名…

tpm2-tools源码分析之tpm2_verifysignature.c(1)

TPM 2.0中的tpm2_verifysignature命令对应的源文件就是tpm2_verifysignature.c&#xff0c;该文件位于tpm2-tools/tools/下&#xff0c;一共有293行&#xff08;版本5.5&#xff09;。 tpm2_verifysignature的功能是使用TPM验证签名。使用加载的密钥验证带有传递给TPM的消息摘…

Spring Cloud Alibaba(二)Nacos统一配置管理

目录 一、为什么需要配置中心 二、常用的配置中心 Nacos 的几个概念 三、Nacos配置中心的使用 &#xff08;一&#xff09;properties格式 1、导入依赖 2、在配置中心新建配置 3、修改配置文件名为bootstrap.yml 4、在微服务中添加nacos config服务地址的配置 5、测试…

2013蓝桥杯真题省赛翻硬币 C语言/C++

[蓝桥杯 2013 省 B] 翻硬币 题目背景 小明正在玩一个“翻硬币”的游戏。 题目描述 桌上放着排成一排的若干硬币。我们用 * 表示正面&#xff0c;用 o 表示反面&#xff08;是小写字母&#xff0c;不是零&#xff09;&#xff0c;比如可能情形是 **oo***oooo&#xff0c;如果…

【Python_Pandas】reset_index() 函数解析

【Python_Pandas】reset_index函数解析 文章目录 【Python_Pandas】reset_index函数解析1. 介绍2. 示例2.1 参数drop2.2 参数inplace2.3 参数level2.4 参数col_level2.5 参数col_fill 参考 1. 介绍 pandas.DataFrame.reset_index reset_index(levelNone, dropFalse, inplaceF…

辅助驾驶功能开发-功能规范篇(16)-2-领航辅助系统NAP-自动变道-1

书接上回 2.3.4.自动变道 当车辆处于导航引导模式NOA功能时(即车辆横向控制功能激活),且车速大于40km/h,驾驶员按下转向灯拨杆或系统判断当前有变道需要时,自动变道系统通过对车道线、自车道前方目标距离、邻近车道前后方目标距离等环境条件进行判断,在转向灯亮起3s后控…