[GESP202306 四級] 2023年6月GESP C++四級上機題超詳細題解,附帶講解視頻!

本文為2023年6月GESP C++四級的上機題目的詳細題解!覺得寫的不錯或者有幫助可以點個贊啦!

(第一次講解視頻,有問題可以指出,不足之處也可以指出)

目錄

題目一講解視頻:

題目二講解視頻:

題目一: 幸運數

題目大意:

解題思路:

代碼(C++):

題目二:圖像壓縮

題目大意:

解題思路:

代碼(C++):



題目一講解視頻:

2023年6月GESP C++四級上機題一


題目二講解視頻:

2023年6月GESP C++四級上機題二


題目一: 幸運數

B3850 [GESP202306 四級] 幸運數 - 洛谷

題目大意:

題目首先定義了,一個數字的個位數為第一位,十位數為第二位...以此內推。

然后呢,對于一個數字num的奇數位置,提取出來,然后進行如下操作:

定義這個數字為x,易得0 <= x <= 9。現在將x * 7,然后現在不斷的進行以下的操作,直到x小于等于9:

求出此時x的數位和sum,然后把x賦值成sum。

經過上述操作后,把x放回原來的位置。

如果num的數位和是8的倍數,那么num是幸運數,輸出T,否則輸出F。

解題思路:

題目主要考察的是模擬,代碼實現能力

根據題目意思,我們主要的操作對象是num的奇數位置,我們可以把num轉換成字符串,可以輸入的時候直接用字符串變量接收。

注意個位數是字符串的最后一位,我們從字符串的最后一位開始遍歷,然后每次讓i -= 2即可保證獲取的是“奇數位置”。

然后根據題目意思進行模擬,在while (x > 9)的循環里面不斷的求出當前x的數位和,賦值給x,最后得出的x,直接把原來的位置的字符變成新的x即可,注意數字和字符之間的轉換。

最后不要忘記求出數位和,然后再判斷是否是8的倍數。

注意題目輸入的是N個數字,我們對每一個數字單獨判斷。

沒什么用的小優化:每個“奇數位置”的操作都是單獨進行的,那么肯定有一個對應值,我們可以先把每個數字操作的結果求出來放在數組里面,然后直接使用即可。

代碼(C++):

#include <bits/stdc++.h>
//https://blog.csdn.net/2401_83669813 csdn: @立志成為算法講師void solve() {//2.std::string s;std::cin >> s;int n = s.size();//3.for (int i = n - 1; i >= 0; i -= 2) {int num = s[i] - '0';num *= 7;//4.5.while (num > 9) {int t = num;int sum = 0;while (t > 0) {sum += t % 10;t /= 10;}num = sum;}//6.s[i] = num + '0';}int sum = 0;for (char c : s) {sum += c - '0';}if (sum % 8 == 0) {std::cout << "T\n";} else {std::cout << "F\n";}
}int main() {/*1.捆綁測試2.把數字當成字符串輸入3.從最后一位開始遍歷4.變換操作5.當數字大于9的時候,不斷的求數位和,然后賦值給新的數字6.把變換后的數字賦值回去*/int N;std::cin >> N;while (N--) {solve();}
}

題目二:圖像壓縮

B3851 [GESP202306 四級] 圖像壓縮 - 洛谷

題目大意:

給你n個長度為偶數,并且都相等的字符串s,這n個字符串組成一幅256級灰階的灰度圖像。

對于其中的一個字符串,每兩個字符組成一個字符串,表示一個16進制的數字,大小為0到255,也就是16進制的0到FF,這個大小表示這個像素點的灰階。題目保證n個字符串包含的灰階至少有16種。

現在我們要把這個256級灰階的灰度圖像壓縮成16級的灰度圖像。

壓縮方式為:

統計出這個圖像每一個灰階的數量,然后取數量最大的16種,如果存在灰階數量相同的灰階,那么灰階值小的在前面。

先把這16種灰階按照從大到小的順序輸出出來。

現在把這數量最大的16種灰階編號為0到F,也就是十進制的0到15。

對于其他的灰階y,我們計算出灰度與16個灰階最近的值(灰階大小,不是個數),也就是絕對值大小,把y編號成相差的絕對值最小的那個,如果有絕對值相同的點,那么我們就編號成編號小的那個。

然后把壓縮后的圖像輸出出來。

解題思路:

本題主要考察,進制的轉換,位運算,自定義排序,模擬,代碼實現能力。


我們首先把握題目的關鍵要求,把每兩個字符組成的字符串作為一個16進制數字,計算出出現次數最多的16個16進制數字,并且后面的排序和作差都要關注這16個16進制數字的大小。

那么我們可以這么寫,先把16進制轉換成10進制,然后我們用一個長度為256的數組cnt來記錄每一個16進制數字出現的次數。也就是cnt[i]為大小為i的數字的出現次數。


統計了出現次數后,我們現在進行自定義排序,求出里面最大的那16個數字。

由于題目要求:然后取數量最大的16種,如果存在灰階數量相同的灰階,那么灰階值小的在前面。

那我們可以這么簡單的寫,我們直接用一個數組id,來存0到255這些數字,然后排序這個數組,數組里面兩個數字的cnt[a] != cnt[b]的時候,cnt大的在前面,否則就是數字小的在前面。

這樣操作之后數組id里面的前16個數字就是我們想要的16個數字了。

可以先輸出出來,記得按照題目轉換回原來的16進制。


最后我們要實現的是,輸出壓縮后的圖像,對于每一個16進制的數字,先轉換成10進制,然后根據題目要求求出差的絕對值最小的那個,再根據題目要求編號成0 - F即可。

具體實現詳見代碼。

代碼(C++):

#include <bits/stdc++.h>
//https://blog.csdn.net/2401_83669813 csdn: @立志成為算法講師int toNum(char c) {if (c <= '9') {return c - '0';}return c - 'A' + 10;
}//16進制轉換成10進制
int to10(std::string s) {int res = toNum(s[0]) * 16 + toNum(s[1]);return res;
}char toChar(int num) {if (num < 10) {return num + '0';}return num - 10 + 'A';
}//10進制轉換成16進制
std::string to16(int num) {std::string res(2, '0');res[1] = toChar(num % 16);num /= 16;res[0] = toChar(num % 16);return res;
}int main() {/*1.用一個長度為256的數組cnt來統計出現次數2.把每一個256的數字都寫出來,用自定義排序根據cnt[i]和數字大小進行排序3.把最大的16個輸出出來4.把其他的數字進行壓縮*/int n;std::cin >> n;std::vector<std::string> a(n);for (int i = 0; i < n; i++) {std::cin >> a[i];}int m = a[0].size();//1.std::vector<int> cnt(256);for (auto& s : a) {for (int i = 0; i < m; i += 2) {std::string t = s.substr(i, 2); //從當前字符開始提取兩個字符int num10 = to10(t);cnt[num10]++;}}//cnt[i]就表示數字i出現的次數std::vector<int> mx16(256);for (int i = 0; i < 256; i++) {mx16[i] = i;}//2.std::sort(mx16.begin(), mx16.end(), [&](int u, int v){if (cnt[u] != cnt[v]) {return cnt[u] > cnt[v];}return u < v;});//3.for (int i = 0; i < 16; i++) {std::cout << to16(mx16[i]);}std::cout << "\n";//4.for (auto& s : a) {for (int i = 0; i < m; i += 2) {std::string t = s.substr(i, 2);int num = to10(t);int id, mnD = 256;for (int i = 0; i < 16; i++) {int d = abs(num - mx16[i]);if (d < mnD) {mnD = d;id = i;}}std::cout << toChar(id);}std::cout << "\n";}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91914.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

內網穿透 FRP 配置指南

關鍵詞&#xff1a;內網穿透、FRP配置、frps、frpc、遠程訪問、自建服務器、反向代理、TCP轉發、HTTP轉發 在開發或部署項目時&#xff0c;我們經常遇到內網設備無法被公網訪問的問題&#xff0c;例如你想從外網訪問你家里的 NAS、遠程調試開發板&#xff0c;或是訪問本地測試環…

SpringBoot 信用卡檢測、OpenAI gym、OCR結合、DICOM圖形處理、知識圖譜、農業害蟲識別實戰

信用卡欺詐檢測通常使用公開數據集 數據準備與預處理 信用卡欺詐檢測通常使用公開數據集如Kaggle的信用卡交易數據集。數據預處理包括處理缺失值、標準化數值特征、處理類別特征。在Spring Boot中,可以使用pandas或sklearn進行數據預處理。 // 示例:使用Spring Boot讀取CS…

使用 Docker 部署 Golang 程序

Docker 是部署 Golang 應用程序的絕佳方式,它可以確保環境一致性并簡化部署流程。以下是完整的指南: 1. 準備 Golang 應用程序 首先確保你的 Go 應用程序可以正常構建和運行。一個簡單的示例 main.go: package mainimport ("fmt""net/http" )func ha…

從零開始的CAD|CAE開發: LBM源碼實現分享

起因:上期我們寫了流體仿真的經典案例: 通過LBM,模擬計算渦流的形成,當時承諾: 只要驗證通過,就把代碼開源出來;ok.驗證通過了,那么我也就將代碼全都貼出來代碼開源并貼出:public class LidDrivenCavityFlow : IDisposable{public LidDrivenCavityFlow(int width 200, int hei…

倉庫管理系統-17-前端之物品類型管理

文章目錄 1 表設計(goodstype) 2 后端代碼 2.1 Goodstype.java 2.2 GoodstypeMapper.java 2.3 GoodstypeService.java 2.4 GoodstypeServiceImpl.java 2.5 GoodstypeController.java 3 前端代碼 3.1 goodstype/GoodstypeManage.vue 3.2 添加菜單 3.3 頁面顯示 1、goodstype表設…

共識算法深度解析:PoS/DPoS/PBFT對比與Python實現

目錄 共識算法深度解析:PoS/DPoS/PBFT對比與Python實現 1. 引言:區塊鏈共識的核心挑戰 2. 共識算法基礎 2.1 核心設計維度 2.2 關鍵評估指標 3. PoS(權益證明)原理與實現 3.1 核心機制 3.2 Python實現 4. DPoS(委托權益證明)原理與實現 4.1 核心機制 4.2 Python實現 5. P…

3.JVM,JRE和JDK的關系是什么

3.JVM&#xff0c;JRE和JDK的關系是什么 1.JDK&#xff08;Java Development Kit&#xff09;&#xff0c;是功能齊全的Java SDK&#xff0c;包含JRE和一些開發工具&#xff08;比如java.exe,運行工具javac.exe編譯工具&#xff0c;生成.class文件&#xff0c;javaw.exe,大多用…

深度學習技術發展思考筆記 || 一項新技術的出現,往往是為了解決先前范式中所暴露出的特定局限

深度學習領域的技術演進&#xff0c;遵循著一個以問題為導向的迭代規律。一項新技術的出現&#xff0c;往往是為了解決先前范式中所暴露出的特定局限。若將這些新技術看作是針對某個問題的“解決方案”&#xff0c;便能勾勒出一條清晰的技術發展脈絡。 例如&#xff0c;傳統的前…

Promise的reject處理: then的第二個回調 與 catch回調 筆記250804

Promise的reject處理: then的第二個回調 與 catch回調 筆記250804 Promise 錯誤處理深度解析&#xff1a;then 的第二個回調 vs catch 在 JavaScript 的 Promise 鏈式調用中&#xff0c;錯誤處理有兩種主要方式&#xff1a;.then() 的第二個回調函數和 .catch() 方法。這兩種方…

Maven模塊化開發與設計筆記

1. 模塊化開發模塊化開發是將大型應用程序拆分成多個小模塊的過程&#xff0c;每個模塊負責不同的功能。這有助于降低系統復雜性&#xff0c;提高代碼的可維護性和可擴展性。2. 聚合模塊聚合模塊&#xff08;父模塊&#xff09;用于組織和管理多個子模塊。它定義了項目的全局配…

sqli-labs:Less-21關卡詳細解析

1. 思路&#x1f680; 本關的SQL語句為&#xff1a; $sql"SELECT * FROM users WHERE username($cookee) LIMIT 0,1";注入類型&#xff1a;字符串型&#xff08;單引號、括號包裹&#xff09;、GET操作提示&#xff1a;參數需以)閉合關鍵參數&#xff1a;cookee p…

大模型+垂直場景:技術縱深、場景適配與合規治理全景圖

大模型垂直場景&#xff1a;技術縱深、場景適配與合規治理全景圖??核心結論?&#xff1a;2025年大模型落地已進入“深水區”&#xff0c;技術價值需通過 ?領域縱深&#xff08;Domain-Deep&#xff09;?、數據閉環&#xff08;Data-Driven&#xff09;?、部署友好&#x…

Kotlin Daemon 簡介

Kotlin Daemon 是 Kotlin 編譯器的一個后臺進程&#xff0c;旨在提高編譯性能。它通過保持編譯環境的狀態來減少每次編譯所需的啟動時間&#xff0c;從而加快增量編譯的速度。 Kotlin Daemon 的主要功能增量編譯&#xff1a; 只編譯自上次編譯以來發生更改的文件&#xff0c;節…

鴻蒙南向開發 編寫一個簡單子系統

文章目錄 前言給設備&#xff0c;編寫一個簡單子系統總結 一、前言 對于應用層的開發&#xff0c;搞了十幾年&#xff0c;其實已經有點開發膩的感覺了&#xff0c;翻來覆去&#xff0c;就是調用api&#xff0c;頁面實現&#xff0c;最多就再加個性能優化&#xff0c;但對底層…

超詳細:2026年博士申請時間線

博士申請是一場持久戰&#xff0c;需要提前規劃。那么&#xff0c;如何科學安排2026年博士申請時間線&#xff1f;SCI論文發表的最佳時間節點是什么&#xff1f;今天給所有打算申博的同學們&#xff0c;詳細解析下&#xff0c;每個時間節點的重點內容。2025年4月&#xff1a;是…

Python爬蟲實戰:研究tproxy代理工具,構建電商數據采集系統

1. 引言 1.1 研究背景 在大數據與人工智能技術快速發展的背景下,網絡數據已成為企業決策、學術研究、輿情監控的核心資源。據 Statista 統計,2024 年全球互聯網數據總量突破 180ZB,其中 80% 為非結構化數據,需通過爬蟲技術提取與轉化。Python 憑借其簡潔語法與豐富的爬蟲…

HighgoDB查詢慢SQL和阻塞SQL

文章目錄環境文檔用途詳細信息環境 系統平臺&#xff1a;N/A 版本&#xff1a;6.0,5.6.5,5.6.4,5.6.3,5.6.1,4.5.2,4.5,4.3.4.9,4.3.4.8,4.3.4.7,4.3.4.6,4.3.4.5,4.3.4.4,4.3.4.3,4.3.4.2,4.3.4,4.7.8,4.7.7,4.7.6,4.7.5,4.3.2 文檔用途 本文介紹了如何對數據庫日志進行分析…

day15 SPI

1串行外設接口概述1.1基本概念SPI&#xff08;串行外設接口&#xff09;是一種高速、全雙工、同步的串行通信協議。串行外設接口一般是需要4根線來進行通信&#xff08;NSS、MISO、MOSI、SCK&#xff09;&#xff0c;但是如果打算實現單向通信&#xff08;最少3根線&#xff09…

阿里云微服務引擎 MSE 及 API 網關 2025 年 7 月產品動態

點擊此處&#xff0c;了解微服務引擎 MSE 產品詳情。

RFID技術在汽車倍速鏈中的應用:驅動智能制造的隱形引擎

RFID技術在汽車倍速鏈中的應用&#xff1a;驅動智能制造的隱形引擎某汽車汽車倍速鏈現場存在問題&#xff1a;&#xff08;1&#xff09;條形碼需人工掃描&#xff0c;數據采集延遲率高達15%&#xff0c;導致生產調度與實際工況脫節&#xff1b;&#xff08;2&#xff09;涂裝車…