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

目录

一. 口算练习题

代码如下

代码解读(简略重点):

代码解读(详细):

二. 小乐乐改数字

代码(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 += "-";
 else
 ret = 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 += "-";
 else
 ret = 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 通常表示程序执行成功。

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

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

相关文章

jvm 篇

字节码的作用 ‌跨平台性‌&#xff1a;字节码是Java实现跨平台特性的关键。Java源代码编译成字节码后&#xff0c;可以在任何安装了Java虚拟机&#xff08;JVM&#xff09;的设备上运行&#xff0c;这使得Java应用程序能够在不同的操作系统和硬件平台上运行而无需重新编译。‌…

【Springboot】Springboot 自定义线程池的参数配置最优是多少

博主介绍&#xff1a;✌全网粉丝22W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

【2】Cisco SD-WAN 组件介绍

1. 概述 Cisco SD-WAN 是一套基于软件定义的广域网(SD-WAN)解决方案,能够提供安全、可扩展且高效的网络连接。它通过集中的控制和智能路径选择,实现跨多个站点的可靠性、可见性和优化。 在 Cisco SD-WAN 体系架构中,主要由四个核心组件构成: vManage(管理平面) vSmart…

测试中的第一性原理:回归本质的质量思维革命

在软件工程领域&#xff0c;测试活动常被惯性思维和经验主义所主导——测试用例库无限膨胀、自动化脚本维护成本居高不下、测试策略与业务目标渐行渐远。要突破这种困境&#xff0c;第一性原理&#xff08;First Principles Thinking&#xff09;提供了独特的解题视角&#xff…

《chatwise:DeepSeek的界面部署》

ChatWise&#xff1a;DeepSeek的界面部署 摘要 本文详细描述了DeepSeek公司针对其核心业务系统进行的界面部署工作。从需求分析到技术实现&#xff0c;再到测试与优化&#xff0c;全面阐述了整个部署过程中的关键步骤和解决方案。通过本文&#xff0c;读者可以深入了解DeepSee…

机器学习在癌症分子亚型分类中的应用

学习笔记&#xff1a;机器学习在癌症分子亚型分类中的应用——Cancer Cell 研究解析 1. 文章基本信息 标题&#xff1a;Classification of non-TCGA cancer samples to TCGA molecular subtypes using machine learning发表期刊&#xff1a;Cancer Cell发表时间&#xff1a;20…

什么是AIOps?

AIOps&#xff08;人工智能运维&#xff0c;Artificial Intelligence for IT Operations&#xff09;是通过使用人工智能&#xff08;AI&#xff09;技术来增强 IT 运维&#xff08;IT Operations&#xff09;的智能化、自动化和效率的概念。它结合了机器学习、数据分析、自动化…

使用deepseek快速创作ppt

目录 1.在DeekSeek生成PPT脚本2.打开Kimi3.最终效果 DeepSeek作为目前最强大模型&#xff0c;其推理能力炸裂&#xff0c;但是DeepSeek官方没有提供生成PPT功能&#xff0c;如果让DeepSeek做PPT呢&#xff1f; 有个途径&#xff1a;在DeepSeek让其深度思考做出PPT脚本&#xf…

DeepSeek 引领的 AI 范式转变与存储架构的演进

近一段时间&#xff0c;生成式 AI 技术经历了飞速的进步&#xff0c;尤其是在强推理模型&#xff08;Reasoning-LLM&#xff09;的推动下&#xff0c;AI 从大模型训练到推理应用的范式发生了剧变。以 DeepSeek 等前沿 AI 模型为例&#xff0c;如今的 AI 技术发展已不局限于依赖…

vscode 设置在编辑器的标签页超出可视范围时自动换行(workbench.editor.wrapTabs)

“workbench.editor.wrapTabs”: true 是 VS Code&#xff08;Visual Studio Code&#xff09; 的一个设置项&#xff0c;它的作用是 在编辑器的标签页超出可视范围时自动换行&#xff0c;而不是显示滚动条。 需要修改settings.json 参考&#xff1a;settings.json 默认值&a…

高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案

目录 一、Ollama 介绍 二、Ollama下载 2.1 官网下载 2.2 GitHub下载 三、模型库 四、Ollmal 使用 4.1 模型运行&#xff08;下载&#xff09; 4.2 模型提问 五、Ollama 常用命令 相关推荐 一、Ollama 介绍 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&…

前端组件标准化专家Prompt指令的最佳实践

前端组件标准化专家Prompt 提示词可作为项目自定义提示词使用&#xff0c;本次提示词偏向前端开发的使用&#xff0c;如有需要可适当修改关键词和示例 推荐使用 Cursor 中作为自定义指令使用Cline 插件中作为自定义指令使用在力所能及的范围内使用最好的模型&#xff0c;可以…

介绍10个比较优秀好用的Qt相关的开源库

记录下比较好用的一些开源库 1. Qt中的日志库“log4qt” log4qt 是一个基于 Apache Log4j 设计理念的 Qt 日志记录库&#xff0c;它为 Qt 应用程序提供了强大而灵活的日志记录功能。Log4j 是 Java 领域广泛使用的日志框架&#xff0c;log4qt 借鉴了其优秀的设计思想&#xff…

如何打造一个更友好的网站结构?

在SEO优化中&#xff0c;网站的结构往往被忽略&#xff0c;但它其实是决定谷歌爬虫抓取效率的关键因素之一。一个清晰、逻辑合理的网站结构&#xff0c;不仅能让用户更方便地找到他们需要的信息&#xff0c;还能提升搜索引擎的抓取效率 理想的网站结构应该像一棵树&#xff0c;…

态、势、感、知中的信息

“态、势中的信息”与“感、知中的信息”分别对应客观系统状态与主观认知过程的信息类型&#xff0c;其差异体现在信息的来源、性质、处理方式及作用目标上。以下通过对比框架和具体案例解析两者的区别&#xff1a; 态势中的信息中的态信息指系统在某一时刻的客观存在状态&…

文本生图的提示词prompt和参数如何设置(基于Animagine XL V3.1)

昨天搞了半天 Animagine XL V3.1&#xff0c;发现市面上很多教程只是授之以鱼&#xff0c;并没有授之以渔的。也是&#xff0c;拿来赚钱不好吗&#xff0c;闲鱼上部署一个 Deepseek 都能要两百块。这里我还是想写篇文章介绍一下&#xff0c;虽不全面&#xff0c;但是尽量告诉你…

基于docker搭建Kafka集群,使用内部自带的Zookeeper方式搭建

前提条件 按照【kafka3.8.0升级文档成功搭建kafka服务】 环境&#xff1a;192.168.2.91 192.168.2.93 并以192.168.2.91环境kafka自带的zookeeper作为协调器。 使用基于KRaft方式进行kafka集群搭建教程 搭建kafka-ui可视化工具 1、创建kafka集群节点192.168.2.91 &#xff…

GitPuk快速安装配置教程(入门级)

GitPuk是一款国产开源免费的代码管理工具&#xff0c;工具简洁易用&#xff0c;开源免费&#xff0c;本文将讲解如何快速安装和配置GitPuk&#xff0c;以快速入门上手。 1、安装 支持 Windows、Mac、Linux、docker 等操作系统。 1.1 Linux安装&#xfeff; 以下以Centos7安装…

奖励模型中的尺度扩展定律和奖励劫持

奖励模型中的尺度扩展定律和奖励劫持 FesianXu 20250131 at Wechat Search Team 前言 最近在考古一些LLM的经典老论文&#xff0c;其中有一篇是OpenAI于ICML 2023年发表的文章&#xff0c;讨论了在奖励模型&#xff08;Reward Model&#xff09;中的尺度扩展规律&#xff08;S…

ASP.NET Core中Filter与Middleware的区别

中间件是ASP.NET Core这个基础提供的功能&#xff0c;而Filter是ASP.NET Core MVC中提供的功能。ASP.NET Core MVC是由MVC中间件提供的框架&#xff0c;而Filter属于MVC中间件提供的功能。 区别 中间件可以处理所有的请求&#xff0c;而Filter只能处理对控制器的请求&#x…