58. 区间和

news/2025/1/18 11:49:39/文章来源:https://www.cnblogs.com/hisun9/p/18516307

题目

本人一开始是这样写的:

#include <iostream>using namespace std;const int N = 100010;
int n;
int s[N];int main()
{cin >> n;for (int i = 1; i <= n; i ++ ){int x;cin >> x;s[i] = s[i - 1] + x;}int l = 0, r = 0;while (cin >> l && cin >> r){cout << s[r + 1] - s[l + 1] << endl;}return 0;}

发现结果不对。

仔细再看了一遍代码,发现是 cout << s[r + 1] - s[l + 1] << endl;这一句的问题,应该改成cout << s[r + 1] - s[l] << endl;,即l + 1那个位置的数也是在区间[l + 1 , r + 1]里的,也要加上。

改成这样就对了:

#include <iostream>using namespace std;const int N = 100010;
int n;
int s[N];int main()
{cin >> n;for (int i = 1; i <= n; i ++ ){int x;cin >> x;s[i] = s[i - 1] + x;}int l = 0, r = 0;while (cin >> l && cin >> r){cout << s[r + 1] - s[l] << endl;}return 0;}

再补充一个点(在卡哥写的题解上看到的):

C++ 代码 面对大量数据 读取 输出操作,最好用scanf 和 printf,耗时会小很多

于是将代码改成这样:

#include <iostream>using namespace std;const int N = 100010;
int n;
int s[N];int main()
{cin >> n;for (int i = 1; i <= n; i ++ ){int x;scanf("%d", &x);s[i] = s[i - 1] + x;}int l = 0, r = 0;while (~scanf("%d %d", &l, &r)){printf("%d\n", s[r + 1] - s[l]);}return 0;}

附上两次的耗时情况:

img

差距蛮明显的。

然后注意下这个while循环里面的条件while (~scanf("%d %d", &l, &r)),不要写成while (scanf("%d %d", &l, &r))

具体原因如下:

  1. scanf的返回值:

    • 当 scanf 成功读取两个整数时,返回值是 2(表示成功读取了两个项)。

    • 当遇到文件结束符(EOF)或者输入错误时,返回值是 EOF(通常是 -1)。

  2. 使用 ~ 操作符:

    • ~ 是按位取反运算符。它对整数的每一位进行反转。

    • 例如:

      • 如果 scanf 返回 2,那么 ~2 的结果是 -3(因为 ~2 反转了二进制的 2,得到 -3)。

      • 如果 scanf 返回 -1(即 EOF),那么 ~-1 的结果是 0(因为 ~-1 反转了 -1 的二进制,得到 0)。

  3. 循环条件的判断:

    while (~scanf("%d %d", &l, &r)) 中:

    • 当 scanf 成功读取两个整数(返回 2),条件为 while (~2),即 while (-3),这个条件为真,循环继续。

    • 当 scanf 返回 EOF(即 -1),条件为 while (~-1),即 while (0),这个条件为假,循环结束。

补充:

在 C 语言中,while 循环的条件判断是基于真值逻辑的:

  • 非零值为真:在 C 语言中,任何非零值都被视为真(true),而 0 被视为假(false)。

  • 负数也是非零:虽然 -3 是负数,但它仍然是非零,因此在条件判断中被视为真。换句话说,while (-3) 是一个真条件,循环会继续执行。

附上一篇博客cin和scanf的返回值知多少

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

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

相关文章

cin和scanf的返回值知多少

cin的返回值 在 C++ 中,cin 是用于从标准输入(通常是键盘)读取数据的对象。 cin 的返回值实际上是一个流对象(std::istream 类型),可以通过流的状态来检查输入操作是否成功。 以下是一些关于 cin 返回值的关键点:输入成功与失败: 当你使用 cin 进行输入时,可以通过 ci…

多语言 AI 翻译 API 数据接口

多语言 AI 翻译 API 数据接口 ai / 翻译 基于 AI 多语言模型 支持多语言 / 基于模型。1. 产品功能基于自有专业模型进行 AI 多语言翻译 高效的文本翻译性能 全接口支持 HTTPS(TLS v1.0 / v1.1 / v1.2 / v1.3); 全面兼容 Apple ATS; 全国多节点 CDN 部署; 接口极速响应,多…

个人可识别信息(PII) AI 去除 API 数据接口

个人可识别信息(PII) AI 去除 API 数据接口 ai / 隐私保护 基于 AI 模型自动去除个人识别信息(PII) 个人信息保护 / AI 模型 。1. 产品功能基于自有专业模型进行 PII 自动去除 高效处理敏感信息 全接口支持 HTTPS(TLS v1.0 / v1.1 / v1.2 / v1.3); 全面兼容 Apple ATS; 全…

MBR20100CT-ASEMI半塑封肖特基二极管MBR20100CT

MBR20100CT-ASEMI半塑封肖特基二极管MBR20100CT编辑:ll MBR20100CT-ASEMI半塑封肖特基二极管MBR20100CT 型号:MBR20100CT 品牌:ASEMI 封装:TO-220 安装方式:插件 批号:最新 最大平均正向电流(IF):20A 最大循环峰值反向电压(VRRM):100V 最大正向电压(VF):0.70V~0…

第三十讲:误删数据后除了跑路,还能怎么办?

第三十讲:误删数据后除了跑路,还能怎么办? 简概还是平淡的开头 ​ 今天我要和你讨论的是一个沉重的话题:误删数据。 ​ 在前面几篇文章中,我们介绍了 MySQL 的高可用架构。 ​ 当然,传统的高可用架构是不能预防误删数据的,因为主库的一个 drop table 命令,会通过 binlo…

TYPE-C PD浅谈(一)

聊聊USB Power Delivery两三事,接下来会依下列几个主题来探讨What is Power Delivery E-Marker Attached Source CAP Sink CAP Power Role Swap Data Role Swap VCONN Swap Alternate Mode Charger Design Note What is Power DeliveryUSB界面历经20年的演变,在界面上一直没有…

【semantic Kernel】对接 Ollama

在 chatGPT 的推动下。LLM 简直火出天际,各行各业都在蹭。听说最近 meta 开源的 llama3 模型可以轻松在普通 PC 上运行,这让我也忍不住来蹭一层。以下是使用 ollama 试玩 llama3 的一些记录。 什么是 llama LLaMA(Large Language Model Meta AI)是Meta开发的大规模预训练语…

Kafka的消费者

Kafka的消费者 Kafka采用消费者组的方式来消费消息,一个消费者组中可以包含多个消费者。消费者对象订阅主题并接收Kafka的消息,然后验证消息并保存结果。尽管一个消费者组中可以包含多个消费者,但是它们订阅的都是同一个主题的消息。 1. 消费模式 当生产者将消息发送到Kafka…

GIS空间索引技术

地理信息系统(Geography Information System,简称GIS)的主要任务之一是有效地检索空间数据及快速响应不同用户的在线查询。地理空间索引技术和方法是GIS的关键技术。是快速高效查询、检索和显示地理空间数据的重要指标。 常用的空间索引技术介绍和比较: 网格空间索引、四叉树…

Base64编码原理

Base64编码原理 Base64作用 目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。 Base64编码原理 Base64的原理比较简单,每当我们使…

项目管理平台实操:项目经理如何快速生成项目报告?(3分钟教程)

一、项目管理平台与报告生成的关联 项目管理平台在项目管理中起着至关重要的作用。它为项目经理提供了一个集中化的管理工具,能够有效地组织和协调项目的各个方面。 首先,项目管理平台可以实现对项目任务的全面管理。通过任务清单功能,项目经理可以清晰地了解每个任务的名称…

游戏平台如何通过技术加持“弯道超车”

随着游戏产业的蓬勃发展,游戏平台与游戏开发引擎之间的兼容性问题日益凸显。为了满足日益多样化的游戏需求,游戏平台在技术上不断创新,力求实现与各大游戏开发引擎的无缝对接。自从微信2017年12月发布了第一款小游戏--“跳一跳”,小游戏以其“轻量化”、“即用即走”的特性…