蓝桥杯备赛题目练习(一)

一. 口算练习题

## 题目描述

王老师正在教简单算术运算。细心的王老师收集了 i 道学生经常做错的口算题,并且想整理编写成一份练习。 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效率。王老师希望尽量减少输入的工作量,比如 5+8 的算式最好只要输入 5 和  8,输出的结果要尽量详细以方便后期排版的使用,比如对于上述输入进行处理后输出 5+8=13以及该算式的总长度 6。王老师把这个光荣的任务交给你,请你帮他编程实现以上功能。

## 输入格式

第一行一个整数 i。

接着的 i行为需要输入的算式,每行可能有三个数据或两个数据。

若该行为三个数据则第一个数据表示运算类型,a 表示加法运算, b 表示减法运算, c 表示乘法运算,接着的两个数据表示参加运算的运算数。

若该行为两个数据,则表示本题的运算类型与上一题的运算类型相同,而这两个数据为运算数。

## 输出格式

输出  i 行。对于每个输入的算式,输出完整的运算式及结果,第二行输出该运算式的总长度。

## 样例 #1

### 样例输入 #1
4
a 64 46
275 125
c 11 99
b 46 64

### 样例输出 #1
64+46=110
9
275+125=400
11
11*99=1089
10
46-64=-18
9

代码如下

​
#include <iostream>
#include <string>
using namespace std;
int main()
{int n = 0;cin >> n;string op;string num1;string num2;string last;int ret = 0;while (n--){string ans;cin >> op;if (op == "a" || op == "b" || op == "c"){cin >> num1 >> num2;int n1 = stoi(num1);int n2 = stoi(num2);ans += num1;if (op == "a")ret = n1 + n2, ans += "+";else if (op == "b")ret = n1 - n2, ans += "-";elseret = n1 * n2, ans += "*";last = op;}else{num1 = op;cin >> num2;int n1 = stoi(num1);int n2 = stoi(num2);ans += num1;if (last == "a")ret = n1 + n2, ans += "+";else if (last == "b")ret = n1 - n2, ans += "-";elseret = n1 * n2, ans += "*";}ans += (num2 + "=" + to_string(ret));cout << ans << endl;cout << ans.size() << endl;}return 0;
}​

代码解读(简略重点):

①利用string定义字符串(需要头文件#include<string>)。

②通过stoi把n1 n2转换为int 型,ans用来计算最终字符串总长度。

③根据题目规则,通过last来“记忆”上一次运算结果。

④to_string()用来把整型转化成字符串string类型。

代码解读(详细):

### **代码逐段解析**
#### 1. **变量定义**

int n = 0;
cin >> n;  // 输入操作次数
string op, num1, num2, last;  // 操作符、操作数、上一次操作符
int ret = 0;  // 运算结果


- `n` 表示后续需要处理的操作次数。
- `op` 可以是操作符(`a`/`b`/`c`)或第一个操作数(数字)。
- `last` 记录上一次的操作符,用于省略操作符时的运算。

#### 2. **主循环**

while (n--) {string ans;  // 当前生成的表达式字符串cin >> op;   // 读取操作符或第一个操作数


- 循环执行 `n` 次,处理每条输入。

#### 3. **分支处理**
##### **情况 1:操作符为 `a`/`b`/`c`**

if (op == "a" || op == "b" || op == "c") {cin >> num1 >> num2;  // 读取两个操作数int n1 = stoi(num1), n2 = stoi(num2);ans += num1;  // 拼接第一个操作数到表达式// 根据操作符计算结果,并记录操作符到表达式if (op == "a") ret = n1 + n2, ans += "+";else if (op == "b") ret = n1 - n2, ans += "-";else ret = n1 * n2, ans += "*";last = op;  // 更新上一次操作符
}


- 明确的操作符(`a`/`b`/`c`)触发对应的加、减、乘法。
- 更新 `last` 以便后续省略操作符时使用。##### **情况 2:操作符为数字(省略操作符)**

else {num1 = op;  // 当前输入的第一个部分是数字(num1)cin >> num2;  // 读取第二个操作数int n1 = stoi(num1), n2 = stoi(num2);ans += num1;  // 拼接第一个操作数到表达式// 根据上一次操作符计算结果if (last == "a") ret = n1 + n2, ans += "+";else if (last == "b") ret = n1 - n2, ans += "-";else ret = n1 * n2, ans += "*";  // 默认乘法(若 last 未初始化)
}


- 输入的第一个部分为数字时,沿用 `last` 中的操作符。
- **潜在问题**:若首次输入就省略操作符,`last` 未初始化会导致默认使用乘法。

#### 4. **生成结果字符串**

ans += (num2 + "=" + to_string(ret));  // 拼接第二个操作数和结果
cout << ans << endl;                   // 输出表达式
cout << ans.size() << endl;            // 输出表达式长度


- 最终生成完整表达式(如 `3+5=8`),并输出其长度。

### **示例输入输出**
#### **输入**
```plaintext
3
a 1 2
b 3 4
5 6
```

#### **输出**
```plaintext
1+2=3
7
3-4=-1
8
5-6=-1
8
```

#### **解释**
1. 第一次输入 `a 1 2`:执行加法,结果为 `3`,表达式长度 7。
2. 第二次输入 `b 3 4`:执行减法,结果为 `-1`,表达式长度 8。
3. 第三次输入 `5 6`:沿用上一次操作符 `b`(减法),结果为 `-1`,表达式长度 8。

通过这段代码,可以学习到字符串拼接、条件分支和输入流的基本操作。

二. 小乐乐改数字

题目描述:

小乐乐喜欢数字,尤其喜欢0和1。他现在得到了一个数,想把每位的数变成0或1。如果某一位是奇数,就把它变成1,如果是偶数,那么就把它变成0。请你回答他最后得到的数是多少。

输入描述:
输入包含一个整数n (0 ≤ n ≤ 109)

输出描述:
输出一个整数,即小乐乐修改后得到的数字。
示例1
输入:
222222
复制
输出:
0
示例2
输入:
123
输出:
101

代码(1):当做整数读取

#include <iostream>
#include <cmath>
using namespace std;
int main()
{int n;cin >> n;int ret = 0;int i = 0; // 标记⼀下此时处理到多少位 while (n){if (n % 10 % 2 == 1) // 如果这⼀位是奇数 {ret += pow(10, i); // pow(a, b) 求 a的b次⽅  }n /= 10; // 把最后⼀位⼲掉 i++; // 去判断下⼀位 }cout << ret << endl;return 0;
}

代码(2):当做字符串处理

#include <iostream>
#include <string>
using namespace std;
int main()
{string s;cin >> s;for (int i = 0; i < s.size(); i++) // 数字字符与对应的数的奇偶⼀致 {if (s[i] % 2){s[i] = '1';}else{s[i] = '0';}}cout << stoi(s) << endl; // 转换成数字输出 return 0;
}

代码解读(简略详细):

①两段代码均可以实现题目要求,第一个代码是通过输入整数来实现,是比较好像常规的一个做法,只是在某些方面注意一下权重问题。

②第二段代码把输入的看成字符串最终转化成整型,更加简单,但是思路巧妙。

代码解读(详细)(第一段):

#include <iostream>
#include <cmath>
using namespace std;
  • #include <iostream>:包含标准输入输出流库,使得程序可以使用cin进行输入操作,使用cout进行输出操作。
  • #include <cmath>:包含数学库,该库提供了许多数学函数,在这段代码中使用了pow函数。
  • using namespace std;:使用标准命名空间,这样在使用标准库中的类和函数时就不需要加上std::前缀。
int main()
{int n;cin >> n;int ret = 0;int i = 0; // 标记⼀下此时处理到多少位 
  • int n;:声明一个整型变量n,用于存储用户输入的整数。
  • cin >> n;:从标准输入读取一个整数,并将其赋值给变量n
  • int ret = 0;:声明一个整型变量ret,并初始化为 0,用于存储最终提取奇数位数字后组成的新整数。
  • int i = 0;:声明一个整型变量i,并初始化为 0,用于标记当前处理到输入整数的第几位。
while (n)
{if (n % 10 % 2 == 1) // 如果这⼀位是奇数 {ret += pow(10, i); // pow(a, b) 求 a的b次⽅  }n /= 10; // 把最后⼀位⼲掉 i++; // 去判断下⼀位 
}
  • while (n):当n不为 0 时,继续循环。这是因为在不断将n除以 10 的过程中,最终n会变为 0,表示已经处理完输入整数的所有位。
  • if (n % 10 % 2 == 1)n % 10用于获取n的最后一位数字,然后再对 2 取余,如果结果为 1,则说明该数字是奇数。
  • ret += pow(10, i);:如果当前位是奇数,则将10i次幂累加到ret中。这里i表示当前位的权重,例如,个位的权重是10^0,十位的权重是10^1,以此类推。pow(10, i)函数用于计算10i次幂。
  • n /= 10;:将n除以 10,相当于去掉n的最后一位数字。例如,若n为 123,执行n /= 10后,n变为 12。
  • i++;:将i的值加 1,表示处理下一位数字。
cout << ret << endl;
return 0;
}
  • cout << ret << endl;:将最终得到的新整数ret输出到标准输出,并换行。
  • return 0;:表示程序正常结束,返回值 0 通常表示程序执行成功。

代码解读(详细)(第二段):

#include <iostream>
#include <string>
using namespace std;
  • #include <iostream>:引入标准输入输出流库,这样程序就能使用 cin 进行输入操作,使用 cout 进行输出操作。
  • #include <string>:引入字符串处理库,使得程序可以使用 std::string 类型来处理字符串。
  • using namespace std;:使用标准命名空间,这样在使用标准库中的类和函数时就无需加上 std:: 前缀。
string s;
cin >> s;
  • string s;:声明一个 std::string 类型的变量 s,用于存储用户输入的字符串。
  • cin >> s;:从标准输入读取一个字符串,并将其存储到变量 s 中。这里假设用户输入的字符串是由数字字符组成的。
for (int i = 0; i < s.size(); i++) // 数字字符与对应的数的奇偶⼀致 
{if (s[i] % 2){s[i] = '1';}else{s[i] = '0';}
}
  • for (int i = 0; i < s.size(); i++):使用 for 循环遍历字符串 s 中的每个字符。s.size() 函数返回字符串 s 的长度。
  • if (s[i] % 2):在 C++ 中,字符类型本质上是整数类型,字符 '0' 到 '9' 对应着连续的 ASCII 码值。因此,s[i] % 2 实际上是判断当前字符对应的 ASCII 码值的奇偶性。由于数字字符的 ASCII 码值与其表示的数值的奇偶性是一致的,所以这里可以直接用字符的 ASCII 码值对 2 取余来判断该数字字符表示的数值是奇数还是偶数。如果余数为 1(即 if 条件为真),则说明该数字字符表示的数值是奇数。
  • s[i] = '1';:如果当前数字字符表示的数值是奇数,则将该字符替换为 '1'
  • s[i] = '0';:如果当前数字字符表示的数值是偶数,则将该字符替换为 '0'
cout << stoi(s) << endl; // 转换成数字输出 
return 0;
  • stoi(s)stoi 是 C++ 标准库中的一个函数,用于将字符串转换为整数。这里将处理后的字符串 s 转换为整数。
  • cout << stoi(s) << endl;:将转换后的整数输出到标准输出,并换行。
  • return 0;:表示程序正常结束,返回值 0 通常表示程序执行成功。

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

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

相关文章

深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据

深入探讨&#xff1a;服务器如何响应前端请求及后端如何查看前端提交的数据 一、服务器如何响应前端请求 前端与后端的交互主要通过 HTTP 协议实现。以下是详细步骤&#xff1a; 1. 前端发起 HTTP 请求 GET 请求&#xff1a;用于从服务器获取数据。POST 请求&#xff1a;用…

毫秒级响应的VoIP中的系统组合推荐

在高并发、低延迟、毫秒级响应的 VoIP 场景中&#xff0c;选择合适的操作系统组合至关重要。以下是针对 Ubuntu linux-lowlatency、CentOS Stream kernel-rt 和 Debian 自定义 PREEMPT_RT 的详细对比及推荐&#xff1a; 1. 系统组合对比 特性Ubuntu linux-lowlatencyCentO…

【LeetCode 刷题】回溯算法(4)-排列问题

此博客为《代码随想录》二叉树章节的学习笔记&#xff0c;主要内容为回溯算法排列问题相关的题目解析。 文章目录 46.全排列47.全排列 II 46.全排列 题目链接 class Solution:def permute(self, nums: List[int]) -> List[List[int]]:res, path [], []used [0] * len(n…

基于多智能体强化学习的医疗AI中RAG系统程序架构优化研究

一、引言 1.1 研究背景与意义 在数智化医疗飞速发展的当下,医疗人工智能(AI)已成为提升医疗服务质量、优化医疗流程以及推动医学研究进步的关键力量。医疗 AI 借助机器学习、深度学习等先进技术,能够处理和分析海量的医疗数据,从而辅助医生进行疾病诊断、制定治疗方案以…

深度学习篇---张量数据流动处理

文章目录 前言第一部分&#xff1a;张量张量的基本概念1.维度标量&#xff08;0维&#xff09;向量&#xff08;1维&#xff09;矩阵&#xff08;2维&#xff09;三维张量 2.形状 张量运算1.基本运算加法减法乘法除法 2.广播3.变形4.转置5.切片6.拼接7.矩阵分解8.梯度运算&…

Redis --- 秒杀优化方案(阻塞队列+基于Stream流的消息队列)

下面是我们的秒杀流程&#xff1a; 对于正常的秒杀处理&#xff0c;我们需要多次查询数据库&#xff0c;会给数据库造成相当大的压力&#xff0c;这个时候我们需要加入缓存&#xff0c;进而缓解数据库压力。 在上面的图示中&#xff0c;我们可以将一条流水线的任务拆成两条流水…

使用 Ollama 和 Kibana 在本地为 RAG 测试 DeepSeek R1

作者&#xff1a;来自 Elastic Dave Erickson 及 Jakob Reiter 每个人都在谈论 DeepSeek R1&#xff0c;这是中国对冲基金 High-Flyer 的新大型语言模型。现在他们推出了一款功能强大、具有开放权重的思想链推理 LLM&#xff0c;这则新闻充满了对行业意味着什么的猜测。对于那些…

2025年大年初一篇,C#调用GPU并行计算推荐

C#调用GPU库的主要目的是利用GPU的并行计算能力&#xff0c;加速计算密集型任务&#xff0c;提高程序性能&#xff0c;支持大规模数据处理&#xff0c;优化资源利用&#xff0c;满足特定应用场景的需求&#xff0c;并提升用户体验。在需要处理大量并行数据或进行复杂计算的场景…

Unity 2D实战小游戏开发跳跳鸟 - 计分逻辑开发

上文对障碍物的碰撞逻辑进行了开发,接下来就是进行跳跳鸟成功穿越过障碍物进行计分的逻辑开发,同时将对应的分数以UI的形式显示告诉玩家。 计分逻辑 在跳跳鸟通过障碍物的一瞬间就进行一次计分,计分后会同步更新分数的UI显示来告知玩家当前获得的分数。 首先我们创建一个用…

langchain基础(二)

一、输出解析器&#xff08;Output Parser&#xff09; 作用&#xff1a;&#xff08;1&#xff09;让模型按照指定的格式输出&#xff1b; &#xff08;2&#xff09;解析模型输出&#xff0c;提取所需的信息 1、逗号分隔列表 CommaSeparatedListOutputParser&#xff1a;…

游戏AI,让AI 玩游戏有什么作用?

让 AI 玩游戏这件事远比我们想象的要早得多。追溯到 1948 年&#xff0c;图灵和同事钱伯恩共同设计了国际象棋程序 Turochamp。之所以设计这么个程序&#xff0c;图灵是想说明&#xff0c;机器理论上能模拟人脑能做的任何事情&#xff0c;包括下棋这样复杂的智力活动。 可惜的是…

鸿蒙物流项目之基础结构

目录&#xff1a; 1、项目结构2、三种包的区别和使用场景3、静态资源的导入4、颜色样式设置5、修改项目名称和图标6、静态包基础目录7、组件的抽离8、在功能模块包里面引用静态资源包的组件 1、项目结构 2、三种包的区别和使用场景 3、静态资源的导入 放在har包中&#xff0c;那…

Cursor 与多语言开发:全栈开发的利器

引言 全栈开发要求开发者跨越前端、后端、数据库甚至数据科学等多个技术领域&#xff0c;而不同技术栈往往需要切换工具和思维方式。Cursor 作为一款 AI 驱动的智能编程助手&#xff0c;凭借其对 20 编程语言 和主流框架的深度支持&#xff0c;正在成为全栈开发的“瑞士军刀”…

算法设计-0-1背包动态规划(C++)

一、问题阐述 0-1 背包问题的目标是在给定背包容量 W 的情况下&#xff0c;从 n 个物品中选择一些物品放入背包&#xff0c;使得背包中物品的总价值最大。每个物品只能选择一次&#xff08;即要么放入背包&#xff0c;要么不放入&#xff09;。 二、代码 #include <iostr…

51c视觉~CV~合集10

我自己的原文哦~ https://blog.51cto.com/whaosoft/13241694 一、CV创建自定义图像滤镜 热图滤镜 这组滤镜提供了各种不同的艺术和风格化光学图像捕捉方法。例如&#xff0c;热滤镜会将图像转换为“热图”&#xff0c;而卡通滤镜则提供生动的图像&#xff0c;这些图像看起来…

全栈开发:使用.NET Core WebAPI构建前后端分离的核心技巧(二)

目录 配置系统集成 分层项目使用 筛选器的使用 中间件的使用 配置系统集成 在.net core WebAPI前后端分离开发中&#xff0c;配置系统的设计和集成是至关重要的一部分&#xff0c;尤其是在管理不同环境下的配置数据时&#xff0c;配置系统需要能够灵活、可扩展&#xff0c…

上海路网道路 水系铁路绿色住宅地工业用地面图层shp格式arcgis无偏移坐标2023年

标题和描述中提到的资源是关于2023年上海市地理信息数据的集合&#xff0c;主要包含道路、水系、铁路、绿色住宅区以及工业用地的图层数据&#xff0c;这些数据以Shapefile&#xff08;shp&#xff09;格式存储&#xff0c;并且是适用于ArcGIS软件的无偏移坐标系统。这个压缩包…

Rust HashMap :当储物袋遇上物品清单

开场白&#xff1a;哈希映射的魔法本质 在Rust的奇幻世界里&#xff0c;HashMap就像魔法师的储物袋&#xff1a; 键值对存储 → 每个物品都有专属咒语&#xff08;键&#xff09;和实体&#xff08;值&#xff09;快速查找 → 念咒瞬间召唤物品动态扩容 → 自动伸展的魔法空间…

Spring Boot统一异常拦截实践指南

Spring Boot统一异常拦截实践指南 一、为什么需要统一异常处理 在Web应用开发中&#xff0c;异常处理是保证系统健壮性和用户体验的重要环节。传统开发模式中常见的痛点包括&#xff1a; 异常处理逻辑分散在各个Controller中错误响应格式不统一敏感异常信息直接暴露给客户端…

使用 Elastic Cloud Hosted 优化长期数据保留:确保政府合规性和效率

作者&#xff1a;来自 Elastic Jennie Davidowitz 在数字时代&#xff0c;州和地方政府越来越多地承担着管理大量数据的任务&#xff0c;同时确保遵守严格的监管要求。这些法规可能因司法管辖区而异&#xff0c;通常要求将数据保留较长时间 —— 有时从一年到七年不等。遵守刑事…