笔试强训2

news2024/11/27 4:34:17

题目1:

倒置字符串_牛客题霸_牛客网

 

 我们先写出代码:

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string 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++;
		}
		if (end != s.end())
		{
			reverse(start, end);
			start = end + 1;
		}
		else
		{
			reverse(start, end);
			start = end;
		}
	}
	cout << s << endl;
	return 0;
}

我们先说思路:我们可以先将整个的字符串进行倒置,然后再把每一个单词进行导致,实现我们的要求

我们先创建一个string对象,使用getline函数,目的是防止让‘ ’变为有效字符,而不是多组输入的标志,然后我们使用reserve函数,对s.begin()到s.end()进行逆置,逆置后的图像是这样的:

接下来,我们的思路是这样的:我们设置两个指针,第一个指针start指向对象的第一个字符的位置,第二个指针end也指向第一个字符的位置,然后让第二个指针end遍历对象来进行判断,假如对应的数组元素为' '时,我们先调用reverse函数把start和end之间的单词进行交换,然后把end+1赋值给start,继续遍历下一个单词。

注意:这个循环有两处停滞点,第一处是当end遭遇\0时,第二处是当end到s.end()位置时,对于第一个,我们先调用reverse函数进行逆置,然后把end+1赋给start即可。对于第二个,我们先调用reverse函数进行逆置,然后把end赋给start即可。 

我们的循环的结束条件是当start和s.end()指向同一个位置时,循环结束。

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
	string s;
	getline(cin, s);
	reverse(s.begin(), s.end());
	auto start = s.begin();
	auto end = start;
	while (start != s.end())
	{
		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:

#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
	int n;
	cin >> n;
	vector<int> a;
	a.resize(n);
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	int i = 0;
	int count = 0;
	while (i < n)
	{
		if (a[i] < a[i + 1])
		{
			while (i < n&&a[i] <= a[i + 1])
			{
				i++;
			}
			count++;
			i++;
		}
		else if (a[i] == a[i + 1])
		{
			i++;
		}
		else
		{
			while (i < n&&a[i] >= a[i + 1])
			{
				i++;
			}
			count++;
			i++;
		}
	}
	cout << count << endl;
}

 我们对题目进行分析:我们要先理解非递增和非递减的意义:非递增包括递减和相等,转换为代码的形式就是这样:a[i]>=a[i+1]

 我们首先要创建变量n,输入n值,这个n就是我们数组元素的个数,然后我们创建n个空间的数组a,使用resize函数,开辟n个空间供我们数组使用。

接下来,我们使用for循环,输入元素到数组中,接下来,我们就开始查找排序子序列的个数。

我们的思路如下:

 i是数组首元素的下标,让i和i+1的下标对应的元素进行比较,a[i]<=a[i+1],表示我们接下来的序列是非递减序列,我们继续遍历,2和3也满足非递减序列,继续遍历,a[i]>a[i+1],不满足非递减序列,表示接下来的序列是非递增序列,我们之前的非递减序列已经结束,我们设置count来继续序列的次数,这时候count+1,我们继续往后遍历,2与2满足非递增序列,我们继续遍历,2和1满足非递增序列,这时候,我们已经遍历完全部的数组元素,我们再让count++,返回count即可。

我们来结合代码分析:

 i是数组元素的下标,所以不能越界,让其小于n

当i下标对应的元素小于i+1下标对应的元素,表示我们是非递减序列,我们进入非递减序列的处理方法,非递减序列可能是很长的序列,所以我们需要使用while循环,首先为了防止while循环内部越界,我们首先让i<n并且当i对应的元素和i+1对应的元素满足非递减序列时,下标i++

当while循环结束时,表示我们不再满足递减序列或者遍历数组完毕,我们让count++,i++

 当i对应的元素和i+1对应的元素相等时,同时满足非递减序列和非递增序列,我们不需要进行处理,只需要让i++即可。

 当a[i]>a[i+1],表示我们满足非递增序列,非递增序列可能会很长,所以我们需要while循环来继续宁遍历,为了防止循环内越界,我们要让i<n,并且我们要满足非递增排序,当退出循环时,表示数组已经遍历完毕或者非递增序列已经结束,这时候我们让count++,让i++.

然后我们打印数组即可。

但是我们这里依旧有越界的存在:

当i=n-1时,a[i+1]就会造成越界访问吗,针对这个问题,我们可以这样处理:

 我们可以多申请一个空间,这样我们进行访问就不会造成越界访问。

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

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

相关文章

AS 打一个正式签名的包

如何打一个带正式签名文件的app (给自己的劳动成果冠名) 1. 选择build -> generate signed bundle/apk 2. 这里有两个选择, bundle or apk, 我们选择apk 于是勾选 apk, 并点下一步 3. 来到选择证书文件的地方, 但是我们这是第一次做, 还没有证书文件, 所以选择新建一个证…

车路协同云控平台建设实践

前言 随着汽车工业水平飞速发展&#xff0c;以及 IoT、5G、V2X 等信息通信技术的发展演进&#xff0c;通过汽车的智能化、网联化升级为大众带来更智能、更便捷的驾乘体验&#xff0c;成为汽车行业的发展趋势&#xff0c;自动驾驶、智能网联汽车成为行业热点。近年来&#xff0…

Dubbo集成Nacos作为注册中心

Nacos简介 什么是Nacos? Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#…

数据要素市场研究资料合集

编 辑&#xff1a;彭文华来 源&#xff1a;大数据架构师彭友们好&#xff0c;我是老彭。最近有个博士彭友在为论文挠头&#xff0c;到处找数据要素市场的资料。正好&#xff0c;国家工业信息安全发展研究中心刚刚发布《中国数据要素市场发展报告&#xff08;2021-2022&#xff…

智能合约介绍

介绍 智能合约是区块链实现可编程化的重要工具&#xff1b;在比特币时期&#xff0c;脚本仅限于描述交易得到内容和状态&#xff1b;随着智能合约的出现可以定义任何数据对象的状态擦欧总——>使其成为网络上的“法律条文”或者“商业共识”。相当于网络中的道德准则&#…

基于GIS的生态安全网络格局构建之主成分分析

来源&#xff1a;GIS前沿 一、数据来源介绍 &#xff08;一&#xff09;数字高程数据、归一化植被指数数据 本文所用到的松原市宁江区数字高程数据采用30 m分辨率的GDEMV 3数字高程数据、归一化植被指数数据采用250m分辨率的MYD13Q1植被指数16天合成产品&#xff0c;这些数据…

【零基础入门SpringMVC】第五期——报文、文件转移、拦截器、异常处理器

一、HttpMessageConverter 代表报文信息转化器&#xff0c;可以将请求报文转换为Java对象&#xff0c;也可以将Java对象转换为响应报文 请求报文分为三部分&#xff1a;请求头、请求空行和请求体 post 请求才会生成请求体get 请求会把请求信息拼接到地址后 概述&#xff1a;这…

经验分析:数据可视化工具入门讲解,如何应用数据可视化

什么是数据可视化&#xff1f;最核心的要点&#xff0c;就是解释数据、进行信息传递、压缩数据信息、突出整体观点。 在分析过程中&#xff0c;通过比较数据的大小、差异、分布&#xff0c;让其轻松呈现。 今天小编给大家介绍一款优秀的在线数据可视化软件。 项目是个人创建的…

第一性原理谈安全性和可靠性

已剪辑自: https://mp.weixin.qq.com/s/jttd-dhv9PmNu25Z-zyd5Q 最近从各个行业对系统的安全性的关注度越来越高&#xff0c;10月28日&#xff0c;工信部公开征求的《道路机动车辆生产准入许可管理条例&#xff08;征求意见稿&#xff09;》中&#xff0c;第六条提出&#xff…

C语言航路外传之隐式转换与优先级的那点事(你程序总是出bug的一个重要原因)

目录 一、表达式求值 二、隐式类型转换 1.基本概念 2.整型提升的意义 3.详解截断与整型提升的过程 4.char类型范围有关的一些事情 5.有关整形提升的一些案例 三、算术转换 四、操作符的属性 1.优先级表格 2.运算规则 3.一些问题表达式 &#xff08;1&#xff09;a…

Linux 之 arm linux 与 windows 使用 tftp 进行文件传输的简单整理

Linux 之 arm linux 与 windows 使用 tftp 进行文件传输的简单整理 目录 Linux 之 arm linux 与 windows 使用 tftp 进行文件传输的简单整理 一、简单介绍 二、tftp 下载安装 三、arm linux 通过tftp 下载 windows 上的文件 四、tftp 命令相关说明 1、busybox tftp命令常…

Baklib|知识库应用场景:制作员工培训手册

持续的专业发展对于想要加入、保留和提升员工的组织来说是必不可少的。为了确保员工总是能从学习能力中受益&#xff0c;您需要考虑创建培训手册&#xff0c;使员工能够胜任并保持他们的工作能力。 在过去&#xff0c;您可能认为培训手册是一本厚重的册子&#xff0c;充满了密…

如何理解电商云仓出租?

为了说清这个概念&#xff0c;我们先说一下云的概念。别看云现在已经漫天飞舞&#xff0c;但真正能准确的把它说明白的并不多&#xff0c;多数人只是跟着一起用而已。云起源于云计算&#xff0c;是指通过云计算技术各种终端设备手机、电脑、电视、车载屏幕等实现互通互联&#…

【教学类-19-03】20221127《ABBABB式-规律排序-A4竖版2份》(中班)

展示效果&#xff1a; 单人使用样式&#xff1a; 单页打印样式 ​ 背景需求&#xff1a; 中班幼儿需要掌握ABBABB的排序规律 前文制作了ABCABC单元格色块&#xff0c;完全套用ABC排序word表格&#xff0c;调整python的代码&#xff0c;随机生成ABB排序样式&#xff0c;引导幼…

1_SpringMVC_概述,2_SpringMVC_项目搭建

M model 模型层 DAO封装 >>> Mybatis V view 视图层 html css js jsp C controller 控制层 Servlet封装 >>> springMVC SpringMVC是spring为展现层提供的基于MVC设计理念的优秀WEB框架,是目前最主流的MVC框架之一 …

疫情下如何保持高效项目交付

作者&#xff1a;饶炯 疫情以来&#xff0c;我们工作和生活的正常秩序不时受到影响&#xff0c;项目开发过程中不时出现项目成员被封闭或开发现场封锁的情况&#xff0c;很多项目不得不临时选择远程开发模式&#xff0c;项目沟通和协作中出现了各种新的问题和困难&#xff0c;严…

[附源码]计算机毕业设计springboot4S店汽车售后服务管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Python库的使用

文章目录库的使用标准库认识标准库import导入模块使用示例&#xff1a;日期差计算使用示例&#xff1a;字符串操作1&#xff09;翻转单词顺序2&#xff09;旋转字符串3&#xff09;统计是给定字符串前缀的字符串数目第三方库认识第三方库包管理器pip使用示例&#xff1a;生成二…

QFile(文件)

QFile QFile提供一个用于读/写的接口&#xff0c;是一个可以用来读/写二进制文件的Qt资源的I/O设备&#xff0c;QFile可以单独使用&#xff0c;一般配合QTextStream或QDataStream 输入文件路径时最好使用"/"作为分隔符 构造函数&#xff1a; 常用的函数&#xff1a;…

前端甘特图组件开发(二)

自定义时间轴功能 由于常见的甘特图时间轴只支持按照天/周/月/年或者固定的时间单位进行划分&#xff0c;但实际使用场景下有时候会需要按照特定且不规则的时间段对进度数据进行直观划分。因此本组件在原时间轴的基础上添加新的自定义时间轴&#xff0c;可通过数据配置自定义时…