ACM练习——第三天

今天继续练习C++和ACM模式

在写题之前先了解一些新的知识

1.#include <algorithm>

        `#include <algorithm>` 是 C++ 标准库中的头文件之一,其中包含了一系列用于处理各种容器(如数组、向量、列表等)和其他数据结构的算法。这个头文件提供了多种常用的算法,包括排序、查找、删除等,以及一些用于操作迭代器的函数。

        以下是一些 `algorithm` 头文件中常用的函数:

1. **排序算法:**
   - `std::sort(begin, end)`:对范围 `[begin, end)` 的元素进行排序。
   - `std::stable_sort(begin, end)`:稳定排序,保留相等元素的相对顺序。

2. **查找算法:**
   - `std::find(begin, end, value)`:在范围 `[begin, end)` 中查找值为 `value` 的元素,返回指向该元素的迭代器。
   - `std::binary_search(begin, end, value)`:在已排序的范围 `[begin, end)` 中二分查找值为 `value` 的元素。

3. **删除和修改算法:**
   - `std::remove(begin, end, value)`:从范围 `[begin, end)` 中删除所有值为 `value` 的元素,返回指向删除后范围末尾的迭代器。
   - `std::replace(begin, end, old_value, new_value)`:将范围 `[begin, end)` 中所有值为 `old_value` 的元素替换为 `new_value`。

4. **其他算法:**
   - `std::max_element(begin, end)`:在范围 `[begin, end)` 中找到最大元素的迭代器。
   - `std::min_element(begin, end)`:在范围 `[begin, end)` 中找到最小元素的迭代器。

        这些算法提供了一种方便且高效的方式来操作和处理各种数据结构。通过 `#include <algorithm>`,你可以在程序中使用这些算法,而不必自己实现它们。


2.第一题

输入两行,第一行是n,第二行是n个字符,每个字符之间使用空格隔开,然后输出的是一个已经排好序的字符串。ok开干

代码如下:

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>using namespace std;int main(){int n;// 获取n的值cin >> n;// 创建一个字符串数组记录所有的字符串vector<string> result(n);// 存入字符串for(int i = 0; i < n; i++){cin >> result[i];}//因为要的是排序好的字符串,所以我们再进行排序sort(result.begin(), result.end());//输出字符串for(int i = 0; i < n; i++){cout << result[i];// 但是记住要添加空格if(i < n - 1){cout << " ";}}return 0;
}

呃,头文件有些是不需要使用的,但是我现在就学了这么几个,所以就有几个放几个啦嘿嘿

3.第二题

这里相对于上一题就没有给出明确的判断循环结束的条件了,但是仍然也是不影响,这种情况昨天已经遇到过了,直接拿下

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>using namespace std;int main(){vector<string> result;string one;// cin >> one这个写法就是,只要没有到Null就一直循环while(cin >> one){// 二话不说直接放入字符数组result.push_back(one);// 如果是换行符// 那么到这里这一行就结束了if(cin.get() == '\n'){// 先将数组进行排序处理sort(result.begin(), result.end());// 然后进行输出for(int i = 0; i < result.size(); i++){cout << result[i];if(i < result.size() - 1){cout << " ";}}// 然后记得换行cout << endl;// 最后记得清除数组元素result.clear();// 然后跳过这次循环continue;}}return 0;
}

说是直接拿下,但是在这里我和  cin.get()方法周旋了好久

我一直不明白为什么我前面已经把 \n换行符加进去了,为什么还需要后面自己手动换行

那么我就做了很多测试,最后通过如下代码测试出来了。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>using namespace std;int main() {vector<string> result;string one;// cin >> one这个写法就是,只要没有到Null就一直循环while (cin >> one) {// 二话不说直接放入字符数组cout << one << "我是one" <<endl;result.push_back(one);// 如果是换行符// 那么到这里这一行就结束了char get = cin.get();cout << "B" << get << "E" << endl;if ( get == '\n') {cout << "换行了";// 先将数组进行排序处理sort(result.begin(), result.end());// 然后进行输出for (int i = 0; i < result.size(); i++) {cout << result[i];if (i < result.size() - 1) {cout << " ";}}// 然后记得换行cout << endl;// 最后记得清除数组元素result.clear();// 然后跳过这次循环continue;}}return 0;
}

然后输出的样子是这样的、

我输入了  a空格b空格c

你会发现  cin.get()每次读取的都是已经读取之后的下一个元素,这就是为什么\n没了需要自己手动的添加,get()方法会将它消耗掉,所以你可以采用peek()方法,但是由于并没用将cin.peek()这个方法的数据添加到数组里,所以还是要自己手动添加。这个问题到这里就完美的结束了。

欧耶\(^o^)/

欧耶\(^o^)/

欧耶\(^o^)/

欧耶\(^o^)/

欧耶\(^o^)/

 4.第三题

使用逗号隔开其实也差不多,但是由于C++的输入法则  “,” 是没有办法变成输入的隔开符号的,所以就只能采用读取一行,然后根据  逗号  隔开的方法来操作了

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>using namespace std;int main(){vector<string> result;string line;// 直接读取一行文字while(getline(cin, line)){// 放入字符串流stringstream strLine(line);// 用于存储每个单词string word;// 通过 ‘,’分割while(getline(strLine, word, ',')){result.push_back(word);}// 排序sort(result.begin(), result.end());// 输出排序之后的结果for(int i = 0; i < result.size(); i++){cout << result[i];if(i < result.size() - 1){cout << ",";}}// 记得换行cout << endl;// 记得清空数组result.clear();}return 0;
}

结束了

这几天的突击基础训练就这样结束了,说实话,基本上算是基础的过渡到C++了,已经貌似,好像可以摆脱使用Java写算法的痛苦了。ok

ヾ( ̄▽ ̄)Bye~Bye~

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows下安装Anaconda5.3.1+Python3.8+TensorFlow2.13.0-CPU版本总结

Python3.8安装可以参考博文https://janus.blog.csdn.net/article/details/55274849 进行安装即可。 【1】Anaconda 清华的开源软件镜像站&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/下载&#xff0c;这里选择的是5.3.1版本。 然后正常安装就可以&am…

构建Docker基础镜像(ubuntu20.04+python3.9.10+pytorch-gpu-cuda11.8)

文章目录 一、前置条件1.创建 ubuntu 镜像源文件【sources.list】2.下载 python 安装包【Python-3.9.10.tgz】 二、构建方法1.构建目录2.创建DockerFile3.打包镜像 一、前置条件 配置一下 ubuntu 的镜像源下载 python 安装包 1.创建 ubuntu 镜像源文件【sources.list】 内容…

3ds Max渲染用专业显卡还是游戏显卡?

使用3dsmax建模时&#xff0c;会面临诸多选择&#xff0c;除了用vr还是cr的决策&#xff0c;硬件选择上也存在着疑问&#xff0c;比如用专业显卡还是消费级游戏显卡&#xff1f;一般来说&#xff0c;除非是特别专业的大型项目和软件&#xff0c;且预算在5位数以上&#xff0c;常…

保姆级使用vuedraggable三方组件

第一步 引入vuedraggable npm i vuedraggable -S 第二步 直接使用&#xff0c;源码如下 <template><draggableclass"list-group"tag"ul"v-model"list"v-bind"{animation: 1000,group: description,disabled: false,ghostClass:…

mq具体使用方式

代码方式 第一步方式导入依赖的方式 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--AMQP依赖&#xff0c;包含RabbitMQ--><…

php+vue3实现点选验证码

buildadmin 中的点选验证码实现 验证码类 <?phpnamespace ba;use Throwable; use think\facade\Db; use think\facade\Lang; use think\facade\Config;/*** 点选文字验证码类*/ class ClickCaptcha {/*** 验证码过期时间(s)* var int*/private int $expire 600;/*** 可以…

理工ubuntu20.04电脑配置记录

8188gu无线网卡配置 首先下载github上的文件&#xff0c;进入文件夹 安装make命令 1. 查看usb无线网卡 sudo lsusb|grep 8188 2. 环境准备 sudo apt-get install git make build-essential git dkms linux-headers-$(uname -r) 3. 编译安装 git clone https://github.com…

Linux_磁盘管理_df命令

1、df命令是用来干什么的 df的全称是disk free&#xff0c;意为“磁盘空间”。 使用df命令可以查看系统中磁盘的占用情况&#xff0c;有哪些文件系统&#xff0c;在什么位置&#xff08;挂载点&#xff09;&#xff0c;总空间&#xff0c;已使用空间&#xff0c;剩余空间等。…

SpringBoot写接口小记 以及 几个层的功能总结(自用 勿喷)

目录 Entity层&#xff1a;实体层 数据库在项目中的类 Mapper层&#xff1a; 持久层 主要与数据库进行交互 Service层&#xff1a;业务层 控制业务 Controller层&#xff1a;控制层 控制业务逻辑 Entity层&#xff1a;实体层 数据库在项目中的类 Entity层是实体层&#xff…

医院手术麻醉信息系统(麻醉知情同意书)源码

手术室麻醉信息管理系统是定位于手术室和麻醉科的科室级临床信息管理系统&#xff0c;主要用于与手术麻醉相关的各项数据的记录、管理和应用&#xff0c;实现医疗信息的共享及再利用&#xff0c;提高科室的整体信息化水平。 该系统将手术室内的各种设备&#xff08;如呼吸机、麻…

#[量化投资-学习笔记018]Python+TDengine从零开始搭建量化分析平台-正态分布与收益率

正态分布(Normal Distribution)又叫高斯分布、常态分布。通常用来描述随机变量的概率分布。 自然界的数据分布通常是符合正态分布规律的&#xff0c;比如说人的身高、体重。但是非自然界数据就不一定了。尤其是经过人为加工过的数据。 金融领域大量使用正态分布来计算收益率和…

如何进行iOS技术博客的备案?

如何进行iOS技术博客的备案&#xff1f; 标题&#xff1a;iOS技术博客备案流程及要求解析 摘要&#xff1a; 在本篇问答中&#xff0c;我们将为iOS技术博主介绍如何进行备案。如果你的iOS应用只包含简单的页面&#xff0c;并通过蓝牙进行数据采集和传输&#xff0c;那么你可能…

Android实验:Activity界面基础

目录 前言实验目的实验内容实验要求代码实现mainActivityResultActivityactivity_mainactivity_result 结果展示 前言 我们都知道&#xff0c;activity是Android中最重要的组件之一&#xff0c;关于activity的具体内容在这里就不多赘述&#xff0c;主打的就是一个主次分明&…

源码级JVS低代码功能新增:动态配置、逻辑多级循环嵌套等等

低代码更新功能 新增: 1.下拉组件选项新增动态配置&#xff1b; 选项的内容可以根据特定的条件或数据源进行动态变化的功能&#xff0c;通过动态配置&#xff0c;用户可以灵活地设置下拉组件的选项内容&#xff0c;例如从数据库或其他数据源中获取选项数据&#xff0c;或者根…

3.3 Linux 文件管理

1、查看系统信息 tty 命令 描述&#xff1a;查看当前系统在哪个终端语法&#xff1a;tty Linux默认情况下提供6个虚拟终端来让用户登录&#xff0c;系统将F1~F6定义为tty1~tty6。 ctrlalt(F1~F6) &#xff1a;从图形界面切换到命令行界面的第 n 个虚拟终端&#xff08;F1 是…

DAY53 1143.最长公共子序列 + 1035.不相交的线 + 53. 最大子序和

1143.最长公共子序列 题目要求&#xff1a;给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08;也可以不删…

MHA的那些事儿

什么是MHA&#xff1f; masterhight availability&#xff1a;基于主库的高可用环境下&#xff0c;主从复制和故障切换 主从的架构 MHA至少要一主两从 出现的目的&#xff1a;解决MySQL的单点故障问题。一旦主库崩溃&#xff0c;MHA可以在0-30s内自动完成故障切换 MHA使用的…

redis-5.0.8主从集群搭建、不重启修改配置文件

一、环境准备 192.168.5.100 redis-01 192.168.5.101 redis-02 192.168.5.102 redis-03 关闭防火墙、能够通网 二、安装redis [rootlocalhost ~]# wget http://download.redis.io/releases/redis-5.0.8.tar.gz [rootlocalhost ~]# tar xf redis-5.0.8.tar.gz -C /usr/loca…

爆款元服务!教你如何设计高使用率卡片

元服务的概念相信大家已经在 HDC 2023 上有了很详细的了解&#xff0c;更轻便的开发方式&#xff0c;让开发者跃跃欲试。目前也已经有很多开发者开发出了一些爆款元服务&#xff0c;那么如何让你的元服务拥有更高的传播范围、更高的用户使用率和更多的用户触点呢&#xff1f;设…

CPS-8910

PCI Express&#xff0c;有线开关设备 CPS-8910专为在PXI平台或软件无线电设备上实现大型多输入多输出(MIMO)扩展配置和系统控制而设计。 CPS-8910提供了2个PCI Express上行端口和8个下行端口来实现无缝系统扩展。 下行端口可以连接软件无线电可重配置设备等外部设备&#xff0…