当前位置: 首页 > news >正文

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

目录

一. 口算练习题

代码如下

代码解读(简略重点):

代码解读(详细):

二. 小乐乐改数字

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

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

代码解读(简略详细):

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

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


一. 口算练习题

## 题目描述

王老师正在教简单算术运算。细心的王老师收集了 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 通常表示程序执行成功。

相关文章:

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

目录 一. 口算练习题 代码如下 代码解读&#xff08;简略重点&#xff09;&#xff1a; 代码解读&#xff08;详细&#xff09;&#xff1a; 二. 小乐乐改数字 代码&#xff08;1&#xff09;&#xff1a;当做整数读取 代码&#xff08;2&#xff09;&#xff1a;当做字符…...

FortiOS 存在身份验证绕过导致命令执行漏洞(CVE-2024-55591)

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

【多线程】线程池核心数到底如何配置?

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 前置回顾2. 动态线程池2.1 JMX 的介绍2.1.1 MBeans 介绍 2.2 使用 JMX jconsole 实现动态修改线程池2.2.…...

Windows图形界面(GUI)-QT-C/C++ - Qt Combo Box

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、概述 1.1 基本概念 1.2 应用场景对比 二、核心属性详解 2.1 行为控制 2.2 显示配置 三、数据操作与访问 3.1 基础数据管理 3.2 高级数据访问 四、用户交互处理 4.1 信号处…...

开源AI智能名片2 + 1链动模式S2B2C商城小程序:内容价值创造与传播新引擎

摘要&#xff1a;本文聚焦于信息爆炸时代下&#xff0c;内容价值的创造与传播。随着用户角色的转变&#xff0c;其在内容生产与传播中的价值日益凸显。同时&#xff0c;深入探讨开源AI智能名片2 1链动模式S2B2C商城小程序这一创新商业模式&#xff0c;如何借助用户创造内容并传…...

python读取excel工具:openpyxl | AI应用开发

python读取excel工具&#xff1a;openpyxl | AI应用开发 openpyxl 是一个 Python 库&#xff0c;专门用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件。它是处理 Excel 文件的强大工具&#xff0c;可以让你在不需要安装 Excel 软件的情况下&#xff0c;对 Excel 文件进行创建、…...

堆的基本概念

1.1 堆的基本概念 虚拟机所在目录 E:\ctf\pwn-self 进入虚拟机的pwndocker环境 holyeyesubuntu:~$ pwd /home/holyeyes holyeyesubuntu:~$ sudo ./1run.sh IDA分析 int __fastcall main(int argc, const char **argv, const char **envp) { void *v4; // [rsp20h] [rbp-1…...

Android车机DIY开发之软件篇(九) NXP AutomotiveOS编译

Android车机DIY开发之软件篇(十一) NXP AutomotiveOS编译 Google 在汽车上也提供了用于汽车的 Google 汽车服务&#xff08;GAS&#xff0c;Google Automotive Service&#xff09;&#xff0c;包含有 Google 地图、应用市场、Google 汽车助理等等。Google 汽车服务同样没有开…...

嵌入式工程师必学(143):模拟信号链基础

概述: 我们每天使用的许多电子设备,以及我们赖以生存的电子设备,如果不使用电子工程师设计的实际输入信号,就无法运行。 模拟信号链由四个主要元件组成:传感器、放大器、滤波器和模数转换器 (ADC)。这些传感器用于检测、调节模拟信号并将其转换为适合由微控制器或其他数…...

《LLM大语言模型深度探索与实践:构建智能应用的新范式,融合代理与数据库的高级整合》

文章目录 Langchain的定义Langchain的组成三个核心组件实现整个核心组成部分 为什么要使用LangchainLangchain的底层原理Langchain实战操作LangSmithLangChain调用LLM安装openAI库-国内镜像源代码运行结果小结 使用Langchain的提示模板部署Langchain程序安装langserve代码请求格…...

e2studio开发RA2E1(5)----GPIO输入检测

e2studio开发RA2E1.5--GPIO输入检测 概述视频教学样品申请硬件准备参考程序源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置GPIO口配置按键口配置按键口&Led配置R_IOPORT_PortRead()函数原型R_IOPORT_PinRead()函数原型代码 概述 本篇文章主要介绍如何…...

Spring @Lazy:延迟初始化,为应用减负

在Spring框架中&#xff0c;Lazy注解的作用非常直观&#xff0c;它就是用来告诉Spring容器&#xff1a;“嘿&#xff0c;这个Bean嘛&#xff0c;先别急着创建和初始化&#xff0c;等到真正需要用到的时候再弄吧&#xff01;” 默认情况下&#xff0c;Spring容器在启动时会立即创…...

将OneDrive上的文件定期备份到移动硬盘

背景&#xff1a; 我在oneDrive上存了很多文件&#xff0c;分布在多个文件夹中&#xff0c;也有套了好几层文件夹的情况。我希望每隔一段时间&#xff0c;将oneDrive上的所有文件向移动硬盘上拷贝一份&#xff0c;但是我只想将距离上一次向移动硬盘拷贝的文件相比&#xff0c;发…...

从0开始,来看看怎么去linux排查Java程序故障

一&#xff0c;前提准备 最基本前提&#xff1a;你需要有liunx环境&#xff0c;如果没有请参考其它文献在自己得到local建立一个虚拟机去进行测试。 有了虚拟机之后&#xff0c;你还需要安装jdk和配置环境变量 1. 安装JDK&#xff08;以OpenJDK 17为例&#xff09; 下载JDK…...

DeepSeek-V3:开源多模态大模型的突破与未来

目录 引言 一、DeepSeek-V3 的概述 1.1 什么是 DeepSeek-V3&#xff1f; 1.2 DeepSeek-V3 的定位 二、DeepSeek-V3 的核心特性 2.1 多模态能力 2.2 开源与可扩展性 2.3 高性能与高效训练 2.4 多语言支持 2.5 安全与伦理 三、DeepSeek-V3 的技术架构 3.1 模型架构 3…...

Deep Sleep 96小时:一场没有硝烟的科技保卫战

2025年1月28日凌晨3点&#xff0c;当大多数人还沉浸在梦乡时&#xff0c;一场没有硝烟的战争悄然打响。代号“Deep Sleep”的服务器突遭海量数据洪流冲击&#xff0c;警报声响彻机房&#xff0c;一场针对中国关键信息基础设施的网络攻击来势汹汹&#xff01; 面对美国发起的这场…...

Redis地理散列GeoHash

GeoHash是一种用于地理位置编码的算法&#xff0c;将二维的地理坐标&#xff08;纬度和经度&#xff09;转换为一维的字符串表示&#xff0c;从而实现对地理位置的高效存储和查询。Redis作为一个内存数据库&#xff0c;提供了对GeoHash的支持&#xff0c;使得地理位置相关的数据…...

JAVA安全—反射机制攻击链类对象成员变量方法构造方法

前言 还是JAVA安全&#xff0c;哎&#xff0c;真的讲不完&#xff0c;太多啦。 今天主要是讲一下JAVA中的反射机制&#xff0c;因为反序列化的利用基本都是要用到这个反射机制&#xff0c;还有一些攻击链条的构造&#xff0c;也会用到&#xff0c;所以就讲一下。 什么是反射…...

专业学习|一文了解并实操自适应大邻域搜索(讲解代码)

一、自适应大邻域搜索概念介绍 自适应大邻域搜索&#xff08;Adaptive Large Neighborhood Search&#xff0c;ALNS&#xff09;是一种用于解决组合优化问题的元启发式算法。以下是关于它的详细介绍&#xff1a; -自适应大领域搜索的核心思想是&#xff1a;破坏解、修复解、动…...

9. k8s二进制集群之kube-controller-manager部署

同样在部署主机上创建证书请求文件(为之后的证书生成做准备)根据上面的证书文件创建证书(结果会在当前目录下产生kube-controller-manager证书)创建kube-controller-manager服务配置文件创建kube-controller-manager服务启动文件同步kube-controller-manager证书到对应mast…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...