藍橋杯備賽題目練習(一)

一. 口算練習題

## 題目描述

王老師正在教簡單算術運算。細心的王老師收集了 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.pswp.cn/web/67973.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67973.shtml
英文地址,請注明出處:http://en.pswp.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;通常要求將數據保留較長時間 —— 有時從一年到七年不等。遵守刑事…