刷题日记①

news2024/10/7 2:29:32

day01

1. %m.ns 打印输出

以下程序的运行结果是()_表示空格

#include <stdio.h>
int main(void) 
{
	printf("%s , %5.3s\n", "computer", "computer");
	return 0;
}

A computer , puter
B computer , __com
C computer , __computer
D computer , compu.ter

【答案解析】B
%m.ns打印输出,其中m表示的是输出字符串的宽度,而n表示从左起截取目标字符串n个字符,并且是右对齐,如果左边不够补空格
若字符串长度>n>m
例如:%3.5s,“computer” 输出的就是"com"
若n>字符串长度
例如:%.15s,“computer” 输出的就是"computer"

那么该题%5.3s的输出结过应该为"__com"

2. 赋值表达式的返回值

下列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;
}

A -1
B 0
C 1
D 2

【答案解析】B
该题目其实考察的是进入for循环的次数,而for循环的判断部分是 j = 0 ,是一个赋值语句,而赋值语句的返回值就是赋值符号右边的值,也就是0,不会进入循环

3. 贪心算法

在这里插入图片描述
队伍的水平值等于该队伍队员中第二高水平值,为了所有队伍的水平值总和最大的解法,也就是说每个队伍的第二个值是尽可能大的值。所以实际值把最大值放到最右边,最小是放到最左边。
【解题思路】:
本题的主要思路是贪心算法,贪心算法其实很简单,就是每次选值时都选当前能看到的局部最优解,所以这里的贪心就是保证每组的第二个值取到能选择的最大值就可以,我们每次尽量取最大,但是最大的数不可能是中位数,所以退而求其次,取每组中第二大的
例如 现在排序后 有 1 2 5 5 8 9 ,那么分组为1 8 9 和 2 5 5
关系arr[arr.length-2*(i+1)

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
    // IO型OJ可能会有多组测试用例,所以这里要持续接收输入多组测试用例。
    int n;
    while (cin >> n)
    {
        long long sum = 0;
        vector<int> a;
        a.resize(3 * n);
        for (int i = 0; i < (3 * n); i++)
        {
            cin >> a[i];
        }
        std::sort(a.begin(), a.end());
        for (int i = 0; i < n; i++) {
            sum += a[a.size() - (2 * (i + 1))];
        }
        cout << sum << endl;
    }
}

day02

4. 指针内容的改变

下面叙述错误的是()

char acX[]="abc";
char acY[]={'a','b','c'};
char *szX="abc";
char *szY="abc";

A acX与acY的内容可以修改
B szX与szY指向同一个地址
C acX占用的内存空间比acY占用的大
D szX的内容修改后,szY的内容也会被更改

【答案解析】D
针对于D选项,szX的内容改变是指的指针指向的改变,而常量字符串"abc"并未改变,所以选D
而A选项,两个字符数组开辟在栈区,所以都是可改变的对象

5. 根据递增递减分段

【答案解析】
在这里插入图片描述

解题思路:

  1. 本题依次比较整个数组
  2. a[i+1]>a[i] ,则进入非递减序列判断,直到遍历到下一个值不大于等于为止count++,然后进行下一位置的判断
  3. a[i+1]<a[i],则进入非递增序列判断,直到遍历到下一个值不小于等于为止count++,然后进行下一位置的判断
  4. a[i+1] == a[i]不进行操作,++i进行下一位置遍历,因为相等既可以属于非递增序列,也可以属于非递减 序列。
    本题注意点:本题开始比较a[i+1]与a[i]进行比较,为了避免越界,数组定义为n+1个,同时给a[n] = 0; a[n] =0带来的影响,我们分为三种情况讨论:
  5. 若到a[n-1] 的最后一组是非递减序列,当i==n-1,a[i] >a[i+1],因为前面的数都是大于0的,这个输入条件已经说明了(去看看题目输入条件描述),里面的循环结束,i++,count++,i==n,外面的循环结束。
  6. 若到a[n-1] 的最后一组是非递增序列,当i==n-1,a[i] >a[i+1],因为前面的数都是大于0的,这个输入条件已经说明了(去看看题目输入条件描述),循环再走一次,i++, i== n,里面的循环结束,i++,count++,i==n+1,外面的循环结束。
  7. 第三种情况 1 2 1 2 1最后一个数是单独的情况,后面补个0,序列变成1 2 1 2 1 0,当走完全面的序列 i==n-1时,a[i] > a[i+1],进入判断出一个非递增序列,count++,i++,循环结束。
  8. 也就是说数组最后一个位置多增加一个0,不会影响第1、2情况的判断,主要是帮助第3情况的正确判断。
#include<iostream>
#include<vector> 
using namespace std;
 
// 本题牛客测试用例不全,至少应该增加以下两组测试用例
// 输入: 
// 4
// 1 3 2 3 
// 输出:2
 
// 输入: 
// 6 
// 3 2 1 1 2 3 
// 输出:2

#include <iostream>
using namespace std;

int main() 
{
    int n = 0;
    cin>>n;
    int arr[n+1];
    for(int i=0;i<n;i++)
    {
        cin>>arr[i];
    }
    arr[n] = 0;
    int i = 0;
    int count = 0;
    while(i<n)
    {
        if(arr[i]<arr[i+1])
        {
            while(i<n && arr[i]<=arr[i+1])
            {
                ++i;
            }
            count++;
            ++i;
        }
        else if(arr[i] == arr[i+1])
        {
            ++i;
        }
        else
        {
            while(i<n && arr[i]>=arr[i+1])
            {
                ++i;
            }
            count++;
            ++i;
        }
    }
    cout << count << endl;
    return 0;
}

6. string类和reverse库函数

在这里插入图片描述
【答案解析】

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int main()
{
    string s1;
    getline(cin, s1);
    auto start = s1.begin();
    auto end = start;
    for (int i = 0; i < s1.size(); i++)
    {
        if (*(end + i) == ' ')
        {
            reverse(start, end + i);
            start = end + i + 1;
        }
    }
    reverse(start, s1.end());
    reverse(s1.begin(), s1.end());
    cout << s1.c_str() << endl;
    return 0;
}

【解题思路1】:
先将整个字符串逆置过来,再遍历字符串,找出每个单词,对单词逆置。这里我们使用了stl算法中的reverse,所以这里使用迭代器遍历string

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
    string s;
    // 注意这里要使用getline,cin>>s遇到空格就接收结束了
    getline(cin, s);
    // 翻转整个句子
    reverse(s.begin(), s.end());
    // 翻转单词
    auto start = s.begin();
    while (start != s.end())
    {
        auto end = start;
        while (end != s.end() && *end != ' ')
            end++;
        reverse(start, end);
        if (end != s.end())
            start = end + 1;
        else
            start = end;
    }
    cout << s << endl;
    return 0;
}

【解题思路2】:
第二思路是一个比较讨巧的思路,直接利用cin>>s接收输入,遇到空格就结束了,自然就分割开了每个单词,其次将每次接收到的单词拼接到之前串的前面就逆置过来了

#include <iostream>
#include <string>
using namespace std;
// cin读取string时自动会被空格分隔开,用另一个字符串存储进行逆序输出
int main()
{
    string s1, s2;
    cin >> s2;
    while (cin >> s1)
        s2 = s1 + " " + s2;
    cout << s2 << endl;
    return 0;
}

day03

7. 大小端与栈性质的运用

假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?

#include <stdio.h>
int main() {
	long long a = 1, b = 2, c = 3;
	printf("%d %d %d\n", a, b, c);
	return 0;
}

A 1,2,3
B 1,0,2
C 1,3,2
D 3,2,1

【答案解析】B
在这里插入图片描述

day04

8. 进制的输入输出形式

有以下程序

#include<iostream>
#include<cstdio>
using namespace std;
int main() {
	int m = 0123, n = 123;
	printf("%o %o\n", m, n);
	return 0;
}

程序运行后的输出结果是()
A 0123 0173
B 0123 173
C 123 173
D 173 173

【答案解析】C
首先我们需要了解的就是进制的输出形式和表示方法
表达方式
二进制:101010b (结尾带b)
八进制:0123 (开头带0)
十进制:123
十六进制:0x123 或者 123h (开头带0x)或者(末尾带h)
输出方式
%d:十进制方式输出
%o:八进制方式输出
%x:十六进制方式输出

9. 通过表达式计算对应值

在这里插入图片描述
在这里插入图片描述

10. 进制转换

在这里插入图片描述

【答案解析】:
【解题思路】:
本题思路很简单,首先想清楚原理:N进制数,每个进制位的值分别是X0* N ^ 0,X1 * N ^ 1, X2* N ^ 2…,X0,X1,X2就是这些进制位的值,就是就是进行取模余数就是当前低进制的位的值是多少,通过除掉进制数,进入下一个进制位的计算。

#include <iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
    string s, table = "0123456789ABCDEF";
    int m, n;
    cin >> m >> n;
    bool flag = false;
    // 如果是负数,则转成正数,并标记一下
    if (m < 0)
    {
        m = 0 - m;
        flag = true;
    }
    // 按进制换算成对应的字符添加到s
    while (m)
    {
        s += table[m % n];
        m /= n;
    }
    if (flag)
        s += '-';
    reverse(s.begin(), s.end());
    cout << s << endl;
    return 0;
}

day05

11. strcat函数的使用

下列程序的打印结果是()

char p1[15] = "abcd", *p2 = "ABCD", str[50] = "xyz";
strcpy(str + 2, strcat(p1 + 2, p2 + 1));
printf("%s", str);

A xyabcAB
B abcABz
C ABabcz
D xycdBCD

【答案解析】D
strcat的函数作用:strcat(p,q) 将q中字符串的内容 拼接在p字符串之后,最终返回p 注意:p空间一定要容纳的下q拼接过来的字符
在这里插入图片描述

12. 动态规划

在这里插入图片描述

day06

13. printf函数中格式化串的性质

执行下面语句后的输出为

int I=1;
if(I<=0)
printf("****\n") ;
else
printf("%%%%\n");

A %%
B ****
C 有语法错,不能正确执行
D %%%%

【答案解析】A
printf(格式化串,参数1,参数2…)
格式化串的作用:printf中第一个参数之后的参数要按照什么格式打印
例如: %d —>按照整型打印 %f —>按照float类型打印…
格式串是存在一定规定的,%符号之后若是跟上特定的字符才会表示一定的格式化串
例如:%Q —>无效的格式 ----> 编译器会忽略%
printf("%Q); —>直接输出Q
那么本题的printf(“%%%%\n”); 在打印浮点数的过程中有时候会存在打印%符号的情况,而%%就会转换成打印%
结果就是两个%

14. 贪心

day07

15. 默认值从右往左依次给出

在 C++ 语言中,对函数参数默认值描述正确的是()
A 函数带默认值的参数只能有一个
B 一个函数的参数若有多个,则参数默认值的设定可以不连续
C 函数参数必须设定默认值
D 在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值

【答案解析】D
在这里插入图片描述

16. 缺省(默认)访问权限

下面关于类定义的说法中,正确的是:
A 类定义中包括数据成员和函数成员的声明
B 类成员的缺省访问权限是保护的
C 数据成员必须被声明为私有的
D 成员函数只能在类体外进行定义

【答案解析】A
针对B选项,缺省访问权限其实就是默认访问权限,C++中class类的默认访问权限是private,而struct类的默认访问权限是public

17. 必须通过初始化列表初始化的条件

有一个类A,其数据成员如下:

class A {
//...
private:
    int a;
public:
    const int b;
    float*& c;
    static const char* d;
    static double* e;
};

则构造函数中,成员变量一定要通过初始化列表来初始化的是:______。
A a b c
B b c
C b c d e
D b c d
E b
F c

【答案解析】B
首先,我们需要明确概念:对于初始化来说,只有初始化列表位置才是真正的初始化,构造函数体中只是赋值,而初始化列表只能对类中非静态的成员变量来进行初始化 (那么本题中可选的只有a,b,c 三个元素可进行初始化列表初始化)

  • 必须要在初始化列表初始化的情况:
    - const 修饰的成员变量
    - 引用类型的成员变量
    - 类类型的对象,该类没有默认的构造函数

其中前两种情况是因为const和引用必须要在初始化的时候赋初值,而对于第三种情况,对于有默认构造函数的类,,编译器会自动调用默认构造函数,但是没有默认构造函数则需要用户自己调用

18. operator +=

C++ 中,有如下类模板定义:

template<class T> class BigNumber {
    long n;
public:
    BigNumber(T i) :n(i) {}
    BigNumber operator+(BigNumber b) {
        return BigNumber(n + b.n);
    }
};

已知 b1, b2 是 BigNumber 的两个对象,则下列表达式中错误的是()
A 3 + 3
B b1 + 3
C b1 + b2
D 3 + b1

【答案解析】D
如果将运算符重载成类的成员函数,形参个数会比该运算符所需的参数个数少1
因为:成员函数具有隐藏的this指针

那么该题目中实现的operator+= 是对两个BigNumber的对象进行相加
A选项:3+3 二者都是int类型 不需要用到运算符重载
B选项:因为类中存在单参的构造函数,该构造函数具有类型转换的功能
b1+3 编译器在调用单参构造函数时,会将3转换成BigNumber类型的对象
C选项:两个BigNumber类型的对象相加
D选项:int + BigNumber类型的对象 因为隐含this指针的缘故,无法实现

19. 类模板的实例化过程

类模板的使用实际上是类模板实例化成一个具体的__________。
A 类
B 函数
C 模板类
D 对象

【答案解析】A
在这里插入图片描述

20. 括号匹配问题

在这里插入图片描述

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

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

相关文章

磁共振成像(MRI)连接组学的应用

前言 如何将磁共振成像(MRI)连接组学应用于研究典型的大脑结构和功能&#xff0c;并在临床环境中用于诊断、预后或治疗&#xff1f;本文将讨论MRI连接组学在评估功能和结构连接方面的可能应用。简而言之&#xff0c;功能连接是一种测量功能磁共振(fMRI)衍生的血氧水平依赖(BOL…

好兄弟离职了,一周面试了20多场,我直呼内行

好兄弟离职之后&#xff0c;一周面试了20多场&#xff0c;最后进了阿里&#xff0c;分享一些面试经历&#xff0c;希望能对大家有帮助&#xff01; 我的面试感受 先说一个字 是真的 “ 累 ” 安排的太满的后果可能就是经常一天只吃一顿饭&#xff0c;一直奔波在路上 不扯这个…

MybatisPlus <= 3.5.3.1 TenantPlugin 组件 存在 sql 注入漏洞(CVE-2023-25330)

漏洞描述 MyBatis-Plus TenantPlugin 是 MyBatis-Plus 的一个为多租户场景而设计的插件&#xff0c;可以在 SQL 中自动添加租户 ID 来实现数据隔离功能。 MyBatis-Plus TenantPlugin 3.5.3.1及之前版本由于 TenantHandler#getTenantId 方法在构造 SQL 表达式时默认情况下未对…

关键词数据分析-搜索词和关键词分析工具

要搜索热门关键词获取&#xff0c;可以采用以下几种方法&#xff1a; 使用百度指数&#xff1a;百度指数是一个实用的工具&#xff0c;可用于查看关键词的热度趋势、搜索量等数据。在百度指数中&#xff0c;您可以输入您要搜索的关键词&#xff0c;并查看近期的相关数据。这可以…

ServletAPI详解(四)-HttpServletResponse

我们来看第三个方法,HttpServletResponse 在servlet运行原理中提到,servlet代码中的doXXX方法的目的就是根据请求计算响应,然后将响应数据设置到HttpServletResponse对象中,然后 Tomcat 就会把这个 HttpServletResponse 对象按照 HTTP 协议的格式, 转成一个字符串, 并通过 Soc…

golang硬核技术(一)内存管理

目录前言tcmallocPageHeapCentralCacheThreadCache小对象分配中对象和大对象总结堆内存分配概念mheapheaparenamspanmcentralmcache微对象分配 tiny allocator小对象分配大对象分配栈内存分配分段栈连续栈栈在go中stackpoolstackLarge栈分配栈缩容前言 golang的内存分配&#…

QT学习笔记( APP 主界面开发项目\滑动界面的设计)

APP 主界面开发项目 本章与大家一起开发 APP 主界面。Qt C提供了像 QStackedWdget 与 QTableView 这种控 件可以方便的切换页面&#xff0c;但是这种切换页面的方法比较生硬&#xff0c;不能像手机一样滑动&#xff0c;往往这种 界面就会给用户较差的体验感。所以在传统的 Qt …

【GPT】让你事半功倍特别好用的5个GPT工具

文章目录前言一、现在还能开通ChatGPT4.0吗&#xff1f;二、推荐五款与ChatGPT的相关实用工具1.一款浏览器插件&#xff1a;ChatGPT for Google2.一款生成图片的AI工具&#xff1a;midjourney3.推荐两款AI自动生成PPT&#xff1a;闪击PPT、mindshow4.识别PFD文件内容对话&#…

信号与系统之《一文看懂傅里叶变换》

“傅里叶变换是一种非常有用的数学工具&#xff0c;它可以将一个复杂的信号分解成许多简单的频率成分。傅里叶变换在信号处理、图像处理、音乐、视频和通信等许多领域都有广泛的应用。相信大部分同学在毕业之后的一段时间之内都还没有理解到傅里叶变换的精髓&#xff0c;今天我…

【Java面试八股文宝典之MySQL篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day20

大家好&#xff0c;我是陶然同学&#xff0c;软件工程大三即将实习。认识我的朋友们知道&#xff0c;我是科班出身&#xff0c;学的还行&#xff0c;但是对面试掌握不够&#xff0c;所以我将用这100多天更新Java面试题&#x1f643;&#x1f643;。 不敢苟同&#xff0c;相信大…

(六)【软件设计师】计算机系统—原码反码补码移码

文章目录一、数据表示二、原码三、反码四、补码五、移码六、范围七、总结一、数据表示 各种数值在计算机中表示的形式称为机器数&#xff0c;其特点是采用二进制计数制&#xff0c;数的符号用0和1表示&#xff0c;小数点则隐含&#xff0c;表示不占位置。机器数对应的实际数值称…

使用zabbix监控avamar【二】

1、在“使用zabbix监控avamar【一】”中介绍了如何设置avamar端&#xff0c;并发送测试消息&#xff0c;本篇将介绍如何在zabbix server端进行配置。 2、在zabbix server的snmp trap日志文件中查找刚上传的报警信息 可以看到已经正常收到客户端信息。 3、在/etc/zabbix/snmpt…

2.0、Java继承与多态 - 方法重写与重载

2.0、Java继承与多态 - 方法重写与重载 重写&#xff08;Override&#xff09;&#xff1a;方法名一样&#xff0c;参数列表也一样 [ 重写也叫做覆写或者覆盖 ]&#xff1b; 重载&#xff08;Overload&#xff09;&#xff1a;方法名一样&#xff0c;但是参数列表不一样&#…

vue-cli 初始化工程

个人记录下vue-cli创建项目的步骤 卸载老版本的vue-cli (这不是必要的) npm uninstall vue-cli -g 如果本地使用 yarn的话,还需执行 yarn global remove vue-cli 安装全新的vue-cli npm install -g vue/cli 安装指定版本的vue-cli npm install -g vue/…

开源后台管理系统解决方案 boot-admin 简介

开源后台管理系统解决方案 boot-admin 简介介绍软件技术路线微服务架构图主要功能框图模块介绍介绍 boot-admin 是一款采用前后端分离架构模式的后台管理框架。系统提炼自实际项目&#xff0c;兼具RuoYi-Vue前端分离版和Ruoyi-Cloud微服务版功能与技术特点。 boot-admin 既有…

顶点程序经典案例——树木生长

返回目录 树木生长Shader一、介绍 大家好&#xff0c;我是阿赵。这次来做一个树木生长的Shader。 顶点程序作为整个渲染管线里面和片段程序并列的两大可控过程之一&#xff0c;一直存在感都比较低。我们平时制作的效果&#xff0c;很多都是在片段程序里面实现的计算&#xff0…

数据结构泛型

1.定义 先让我们看看官方是如何定义泛型的 是不是看起来不太容易&#xff0c;解释一下&#xff1a; 就是我们想有一种数据类型&#xff0c;它可以适用各种数据类型。从代码上讲就是对类型实现参数化。 2.引例 例&#xff1a;实现一个类&#xff0c;类中包含一个数组成员&…

直方图 颜色映射

文章目录hist map1. 原理2.灰度图3. 对于彩色图像4. 直方图规定化效果hist map 1. 原理 code:https://github.com/rossgoodwin/hmap 利用队列记录 hist src > tgt, src < tgt , src tgt的 索引。 然后&#xff0c;对于每个hist excess, 将其移动到 hist deficit 进行…

linux环境下,使用binlog模式恢复mysql数据(mysql数据库中的一张表误删了怎么找回?)。

linux环境下&#xff0c;使用binlog模式恢复mysql数据&#xff08;mysql数据库中的一张表误删了怎么找回&#xff1f;&#xff09;。 问题&#xff1a;linux中开启binlog模式下&#xff0c;mysql数据库中的一张表误删了怎么找回&#xff1f; 1.首先在mysql中查看是否开启binl…

气传导耳机是不是智商税?气传导耳机值得不值得入手?一文带你看懂

先说结论:并不是智商税。 目前的声音传播途径分为固体、气体和液体。而气传导耳机顾名思义&#xff0c;就是通过气体传声&#xff0c;这一点和我们日常使用的头戴式耳机、半入耳式入耳式耳机都是一样的&#xff0c;和我们日常生活中接触到最多的声音传播方式也是一样。 只不过…