ACM练习——第二天

        今天又是一天课,满课,很累哈,计组真的挺难的,但是多学学还是可以学明白。行吧,继续进入今天的ACM练习,现阶段都是主要练习Java到C++的语言过渡。

        因为今天的题目多半都是昨天的延伸,我就不提供Java的对比代码了。

1.题目一

题目来自牛客网

B-A+B(2)_OJ在线编程常见输入输出练习场 (nowcoder.com)

        呃,有啥疑问,t是多少就循环多少次呗。

然后记住C++的输入输出语句就行

上代码:

#include <iostream>int main() {// 读取数据组数 tint t;std::cin >> t;// 处理每一组数据for (int i = 0; i < t; i++) {// 读取两个整数 a 和 bint a, b;std::cin >> a >> b;// 计算并输出 a+b 的结果std::cout << a + b << std::endl;}return 0;
}

2.题目二

也是计算a+b

 代码示例:

#include <iostream>using namespace std;int main(){// 在a和b都是0的时候结束while(true){int a;int b;// 给ab赋值cin >> a;cin >> b;// 如果为0,就不输出结果了,然后直接结束循环if(a == 0 && b == 0){break;}// 如果至少一方不为0输出结果cout << a + b << endl;}return 0;
}

3.题目三

        成功将a+b净化为了a+b+c+...+n

        那就直接展示吧~~学了那么多,这点还是可以拿捏的只是C++的语法不同罢了

代码示例:

#include <iostream>using namespace std;int main(){// 先将a,b定义出来int x;// 然后进入死循环,直到遇到0while(true){int n;cin >> n;if(n == 0){break;}int result = 0;for(int i = 0; i < n; i++){// 然后进行每次的累加求和cin >> x;   result += x;}cout << result << endl;}return 0;}

4.题目四

        分析一下,第一行表示有多少组数据,

        然后每行的第一个数就是这组数据的数量,简单~!~~

        其实就是前几个题目的结合

代码示例:

#include <iostream>using namespace std;int main(){// 先接收第一行的参数,获得所有的数据组的数量int allLine;cin >> allLine;// 然后就可以进入allLine次数循环for(int i = 0; i < allLine ; i++){// 然后在这每次的循环中再进行每行的第一个数字次数的循环int thisLine;cin >> thisLine;int result = 0;for(int j = 0; j < thisLine; j++){int x;cin >> x;result += x;}cout << result << endl;}return 0;
}

5.题目五

        那这就需要自己来判断循环什么时候结束了

        每一行的第一个数是这一行要计算的数据量

        相比如前几个有明确的结束条件,这里的结束条件算是比较的隐蔽,  

但是仔细一点仍然可以发现。

        就是数据数据为Null的时候,就是结束的时候,所以结束条件需要写在前面即可。

代码示例:

#include <iostream>using namespace std;int main(){// 首先接收开头的第一个数据// 若数据为Null则结束循环while(true){int n;if(!(cin >> n)){// 为NULL(为0)则结束循环break;}// 走到这里则不为0,而且我们还拿到了每行要取多少个元素相加int result = 0;for(int i = 0; i < n; i++){int x;cin >> x;result += x;}// 返回数值,记得添加换行符cout << result << endl;}return 0;}

6.题目六

        这里就没有每次很好的判断条件了。

        在Java之中我可以很快的告诉你使用readLine()这个API来解决,但是在C++中我还是查询了一下,

        可以使用std::getline读取一行数据

        `std::getline` 是 C++ 标准库中的一个函数,用于从输入流中读取一行数据。它的基本用法如下:

```cpp
#include <iostream>
#include <string>int main() {std::string line;// 逐行读取输入while (std::getline(std::cin, line)) {// 对读取到的一行数据进行处理// ...}return 0;
}
```

        在上述示例中,`std::getline` 函数被用来从标准输入流 (`std::cin`) 中逐行读取数据,并将每行的内容存储在名为 `line` 的字符串中。循环会继续执行,直到 `std::getline` 遇到文件末尾或者发生了读取错误。

        你可以在循环中对读取到的每一行数据进行进一步处理,比如使用 `std::istringstream` 分割字符串或者进行其他操作。

        如果你想指定一个定界符来分割行内的内容,你可以使用 `std::getline` 的另一个版本,指定第三个参数作为定界符:

```cpp
#include <iostream>
#include <string>
#include <sstream>int main() {std::string line;// 逐行读取输入while (std::getline(std::cin, line)) {std::istringstream iss(line);std::string token;// 以空格为分隔符,逐个读取字符串while (std::getline(iss, token, ' ')) {// 对读取到的字符串进行处理// ...}}return 0;
}
```

        在这个例子中,`std::getline(iss, token, ' ')` 使用空格作为分隔符,将 `iss` 流中的内容逐个读取到 `token` 字符串中。这样,你就可以逐个处理分隔开的字符串。

        再详细说一下使用std::istringstream处理数据

        `std::istringstream` 是 C++ 标准库中的一个类,用于将字符串当做输入流来处理。它可以从字符串中提取数据,就像 `std::cin` 从标准输入流中提取数据一样。以下是一个简单的示例,演示了如何使用 `std::istringstream`:

```cpp
#include <iostream>
#include <sstream>
#include <string>int main() {// 定义一个字符串std::string input_str = "10 20 30 40 50";// 使用 std::istringstream 对字符串进行处理std::istringstream iss(input_str);int num;// 从 iss 中逐个读取整数并输出while (iss >> num) {std::cout << "Read: " << num << std::endl;}return 0;
}
```

        在这个示例中,我们首先定义了一个包含空格分隔整数的字符串 `input_str`。然后,我们使用 `std::istringstream` 类创建了一个字符串流 `iss`,并将字符串 `input_str` 传递给它。接下来,我们使用 `while (iss >> num)` 循环,它会逐个从字符串流中读取整数,并输出到标准输出流中。

        你可以使用类似的方法在你的程序中处理输入字符串。例如,你可以在循环中使用 `iss >> num` 读取整数,然后对这些整数进行累加等操作。

然后又有问题了

这里读取的iss中不是字符串吗,为什么可以直接和整数类型累加呢?

答:
  iss >> num 会从字符串流 iss 中读取一个字符串,并使用 std::stoi 将其转换为整数。这样,你就可以逐个读取字符串并将其转换为整数后进行累加。

还有一点就是,在C++中其实是没有string类型的,你需要使用字符数组替代或者采用标准函数库

#include <string>中的    std::string

代码示例:

#include <iostream>
#include <sstream>
#include <string>using namespace std;int main(){// 先定义出接收这一行字符串的数据string line;// 开始循环获取while(getline(cin, line)){istringstream iss(line);int num;int result = 0;// 逐个读取整数并且累加while(iss >> num){result += num;}cout << result << endl;}return 0;}

完美运行!

然后我问了基地学习C++的负责人又给出了如下代码,也可以完美运行,更实用

#include<bits/stdc++.h>
using namespace std;int main()
{int n;while(cin >> n){int sum = n;while(cin.get() != '\n'){int m;cin >> m;sum += m;}cout << sum << endl;}return 0;
}

结语

今天又学习到了一些C++的语法,和一些很使用的操作,又是收获满满的一天\(^o^)/

ヾ( ̄▽ ̄)Bye~Bye~

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

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

相关文章

Leetcode—4.寻找两个正序数组的中位数【困难】

2023每日刷题&#xff08;二十九&#xff09; Leetcode—4.寻找两个正序数组的中位数 直接法实现代码 int mid, mid1, mid2; bool findmid(int n, int k, int x) {if(n % 2 1) {if(k n / 2) {mid x;return true;}} else {if(k n / 2 - 1) {mid1 x;} else if(k n / 2) {…

【Linux】Ubuntu16.04系统查看已安装的python版本,及其配置

前情提示&#xff1a;我已经在Ubuntu16.04里用源码安装了python3.8.11&#xff0c;Ubuntu16.04系统默认安装2.7.12与3.5.2 1.查看已安装版本 python2 --version #查看python2安装版本 python3 --version #查看python3安装版本 python3.5 --version #查看python3.5安装…

【C++】:STL——标准模板库介绍 || string类

&#x1f4da;1.什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法的软件框架 &#x1f4da;2.STL的版本 原始版本 Alexander Stepanov、Meng Lee 在…

基于 Redis 实现的分布式锁

获取锁 互斥&#xff1a;确保只有一个线程获得锁 # 添加锁 利用setnx的互斥性 127.0.0.1:6379> setnx lock thread1释放锁 手动释放锁 超时释放&#xff1a;获取锁时设置一个超时时间 #释放锁 删除即可 127.0.0.1:6379> del lock两步合成一步 help setSET key value …

hive里因为列名用了关键字导致建表失败

代码 现象 ParseException line 6:4 cannot recognize input near percent String COMMENT in column name or primary key or foreign key 23/11/13 11:52:57 ERROR org.apache.hadoop.hive.ql.Driver: FAILED: ParseException line 6:4 cannot recognize input near percent …

Linux C 进程编程

进程编程 进程介绍进程的定义进程和线程以及程序的区别进程块PCB进程的状态相关指令 进程调度算法先来先服务调度算法 FCFS短作业(进程)优先调度算法 SJF优先权调度算法 FPF优先权调度算法的类型非抢占式优先权算法抢占式优先权算法 优先权类型静态优先权动态优先权 高响应比优…

MQ四大消费问题一锅端:消息不丢失 + 消息积压 + 重复消费 + 消费顺序性

RabbitMQ-如何保证消息不丢失 生产者把消息发送到 RabbitMQ Server 的过程中丢失 从生产者发送消息的角度来说&#xff0c;RabbitMQ 提供了一个 Confirm&#xff08;消息确认&#xff09;机制&#xff0c;生产者发送消息到 Server 端以后&#xff0c;如果消息处理成功&#xff…

MySQL 人脸向量,欧几里得距离相似查询

前言 如标题&#xff0c;就是通过提取的人脸特征向量&#xff0c;写一个欧几里得 SQL 语句&#xff0c;查询数据库里相似度排前 TOP_K 个的数据记录。做法虽然另类&#xff0c;业务层市面上有现成的面部检索 API&#xff0c;技术层现在有向量数据库。 用 MySQL 关系型存储 128 …

C语言 每日一题 牛客网 11.13 Day17

找零 Z国的货币系统包含面值1元、4元、16元、64元共计4种硬币&#xff0c;以及面值1024元的纸币。 现在小Y使用1024元的纸币购买了一件价值为N(0 < N≤1024)的商品&#xff0c;请问最少他会收到多少硬币&#xff1f; 思路 运用if语句进行判断分类 代码实现 int main() {…

执行力太差的人,如何才能提高执行力?

执行力是计划的落地执行&#xff0c;是按照计划稳步推进&#xff0c;导向结果的能力。不同的人&#xff0c;其执行力有很大的差别。比如说有拖延症的人&#xff0c;基本上是谈不上执行力的&#xff0c;执行力是一个综合体&#xff0c;是多个要素的共同作用。 在企业HR人才测评…

【左程云算法全讲10】打表技巧和矩阵处理技巧

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于左程云算法课程进行的&#xff0c;每个知识点的修正和深入主要参考…

Java进阶(垃圾回收GC)——理论篇:JVM内存模型 垃圾回收定位清除算法 JVM中的垃圾回收器

前言 JVM作为Java进阶的知识&#xff0c;是需要Java程序员不断深度和理解的。 本篇博客介绍JVM的内存模型&#xff0c;对比了1.7和1.8的内存模型的变化&#xff1b;介绍了垃圾回收的语言发展&#xff1b;阐述了定位垃圾的方法&#xff0c;引用计数法和可达性分析发以及垃圾清…