ACM练习——第二天

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

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

1.题目一

题目来自牛客网

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

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

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

上代码:

#include <iostream>

int main() {
    // 读取数据组数 t
    int t;
    std::cin >> t;

    // 处理每一组数据
    for (int i = 0; i < t; i++) {
        // 读取两个整数 a 和 b
        int 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;
    // 然后进入死循环,直到遇到0
    while(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~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python的函数定义中99%的人会遇到的一个坑

列表是一种经常使用的数据类型。在函数的定义中&#xff0c;常常会使用列表作为参数。 比如&#xff0c;要测试一个接口的数据&#xff0c;接口返回的数据格式如下&#xff1a; {"code": "20000", "data": ["孙悟空","李白&quo…

【C语言学习】24 - strcpy()函数

文章目录 1 函数原型2 参数3 返回值4 使用说明5 示例5.1 示例1 1 函数原型 strcpy()&#xff1a;将str指向的字符串拷贝至dest&#xff0c;函数原型如下&#xff1a; char *strcpy(char *dest, const char *src);2 参数 strcpy()函数有两个参数src和dest&#xff1a; 参数s…

Python基础入门----使用Pipenv工具时产生的Pipfile和Pipfile.lock文件有什么区别以及有什么作用

文章目录 PipfilePipfile.lock实操示例当我们使用 Pipenv 工具进行 Python 项目的依赖管理时,会遇到两个重要的文件:Pipfile 和 Pipfile.lock。这两个文件在项目中扮演着不同但又相互补充的角色。接下来,我将详细介绍这两个文件的区别和作用,并提供一些具体的使用示例。 P…

基于入侵杂草算法优化概率神经网络PNN的分类预测 - 附代码

基于入侵杂草算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于入侵杂草算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于入侵杂草优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

C 语言多维数组

C 语言多维数组 在本教程中&#xff0c;您将借助示例学习使用多维数组&#xff08;二维和三维数组&#xff09;。 在C语言编程中&#xff0c;您可以创建一个数组数组。这些数组称为多维数组。例如&#xff0c; float x[3][4];这x是二维&#xff08;2d&#xff09;数组。该数…

二分法中的两个模板

在acwing的算法基础课中&#xff0c;yxc给出了二分的两个模板&#xff0c;这里举有序数组查找某个数的例子来说明这两个模板。 模板1&#xff1a; 当我们将区间[l, r]划分成[l, mid]和[mid 1, r]时&#xff0c;其更新操作是r mid或者l mid 1;&#xff0c;计算mid时不需要加…

单链表经典OJ题(三)

目录 1、反转链表 2、合并两个有序链表 3、链表的中间结点 4、环形链表的约瑟夫问题 5、移除链表元素 6、移除元素 1、反转链表 206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 翻转链表的实质就是更改当前结点的前驱结点和后继结点 假设原链表为:1->2->…

深入理解强化学习——马尔可夫决策过程:随机过程和马尔可夫性质

分类目录&#xff1a;《深入理解强化学习》总目录 下图介绍了强化学习里面智能体与环境之间的交互&#xff0c;智能体得到环境的状态后&#xff0c;它会采取动作&#xff0c;并把这个采取的动作返还给环境。环境得到智能体的动作后&#xff0c;它会进入下一个状态&#xff0c;把…

【电子通识】USB端口颜色编码标识

不知道你有没有发现 USB 口有不同的颜色&#xff0c;黑色、蓝色、紫色、红色、黄色等等&#xff0c;你知道不同颜色的 USB 口各代表什么意思吗&#xff1f; 这些颜色不是USB规范所要求的&#xff0c;设备制造商之间也不一致。例如&#xff0c;Intel使用橙色表示充电端口&#…

Spring Cloud学习(八)【RabbitMQ 服务异步通讯】

文章目录 初识 MQ同步通讯异步通讯MQ 常见框架 RabbitMQ 快速入门RabbitMQ 单机部署RabbitMQ概述常见消息模型 SpringAMQPSimpleQueue 模型WorkQueue 模型发布订阅模型发布订阅-Fanout Exchange发布订阅-DirectExchange发布订阅-TopicExchange消息转换器 初识 MQ 同步通讯 同步…

007 Linux fork()函数

前言 本文将会以提问的形式展开向你介绍fork函数 文章重点 关于fork函数&#xff0c;本文重点在于解决以下疑问 疑问一&#xff1a; 为什么fork之前的代码只有父进程执行&#xff0c;然而fork之后的代码父子进程都要执行 疑问二&#xff1a; 1、既然fork之后父子进程会执行一…

微信小程序:页面跳转传参问题

今天后端大兄弟突然拿着一个反编译过来的小程序源码&#xff0c;问能不能改。我心里直道好家伙&#xff0c;WebGIS开发的岗位&#xff0c;前端的活儿真是一个不少。大致看了看有几处是调整页面和接口修改的&#xff0c;源码部分和Vue项目语法十分相像&#xff0c;就临阵磨枪&am…

【java面试题】Integer对象输出结果是?

/** Copyright (c) 2006, 2023, webrx.cn All rights reserved.**/package cn.webrx;/*** <p>Project: wxbili2mp4 - Test* <p>Powered by webrx On 2023-11-14 20:28:46* <p>描述&#xff1a;<p>** author webrx [webrx126.com]* version 1.0* since …

2.3.5 交换机的VRRP技术

实验2.3.5 交换机的VRRP技术 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.交换机的基本配置 六、任务验收七、任务小结 一、任务描述 某公司的网络核心层原来采用一台三层交换机&#xff0c;随着网络应用的日益增多&#xff0c;对网络的可靠性也提出了越来…

生信分析|基因组倍型鉴定

简介 基因组倍型通常指一个生物体细胞中染色体的组合&#xff0c;即染色体数目的倍数。在生物学中&#xff0c;主要有两种类型的基因组倍型&#xff1a;单倍体和多倍体。 「单倍体&#xff08;Haploid&#xff09;&#xff1a;」 单倍体生物体的细胞中只包含每一对同源染色体的…

凸包的学习之路

学习视频选择的是&#xff1a;清华大学邓俊辉教授的《计算几何》课程 关于我为什么学习 凸包&#xff08;Convex Hull&#xff09;&#xff1f; ——在学习过程中遇到了凸包问题&#xff0c;凸包在CV领域的基础性&#xff0c;使我觉得深入了解凸包是必要的。此外&#xff0c;…

交换机基础知识之安全配置

交换机在网络基础设施中扮演着重要角色&#xff0c;它促进了设备之间数据包的流动。正因此&#xff0c;采取适当的安全措施来保护网络免受未经授权的访问和潜在攻击至关重要。本文将全面解读交换机基础安全配置知识&#xff0c;并提供实践方案&#xff0c;以保证安全的网络环境…

【Linux】-再谈动静态库-手把手教你自己制作一个动静态库

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

计算机缺失vcruntime140.dll如何修复?超简单的5个解决方法

在我们日常使用电脑的过程中&#xff0c;可能会遇到各种各样的问题和错误提示。其中&#xff0c;一个比较常见的错误提示就是“vcruntime140.dll丢失”。这个错误通常发生在我们尝试运行某个程序或应用时&#xff0c;系统无法找到或加载所需的vcruntime140.dll文件。 vcruntime…

Ubuntu安装mysql(解决ubuntu Access denied for user ‘root‘@‘localhost‘报错)

1、安装mysql sudo apt-get install mysql-server 上述命令会安装以下包&#xff1a; apparmor mysql-client-5.7 mysql-common mysql-server mysql-server-5.7 mysql-server-core-5.7 因此无需再安装mysql-client等。安装过程会提示设置mysql root用户的密码&#xff0c;设…