2021年09月 C/C++(二級)真題解析#中國電子學會#全國青少年軟件編程等級考試

在這里插入圖片描述

第1題:字符統計

給定一個由a-z這26個字符組成的字符串,統計其中哪個字符出現的次數最多。
輸入
輸入包含一行,一個字符串,長度不超過1000。
輸出
輸出一行,包括出現次數最多的字符和該字符出現的次數,中間以一個空格分開。如果有多個字符出現的次數相同且最多,那么輸出ascii碼最小的那一個字符。
樣例輸入
abbccc
樣例輸出
c 3

下面是一個使用C語言編寫的字符統計問題的程序的示例代碼:

#include <stdio.h>
#include <string.h>int main() {char str[1001];scanf("%s", str);int count[26] = {0};  // 用于統計每個字符出現的次數,下標0代表字符'a',下標1代表字符'b',以此類推int len = strlen(str);for (int i = 0; i < len; i++) {count[str[i] - 'a']++;  // 統計字符出現的次數}char maxChar;int maxCount = 0;for (int i = 0; i < 26; i++) {if (count[i] > maxCount) {maxCount = count[i];maxChar = i + 'a';}}printf("%c %d\n", maxChar, maxCount);return 0;
}

在上述代碼中,我們首先定義了一個字符數組str來保存輸入的字符串。

然后,我們定義一個整數數組count,用于統計每個字符出現的次數。數組的下標從0到25分別對應字符’a’到’z’。

接下來,我們使用strlen函數獲取輸入字符串的長度,然后使用一個循環遍歷字符串的每個字符。通過將字符減去字符’a’的ASCII碼值,將其映射到count數組的正確下標上,并將對應下標的元素加1,以統計字符出現的次數。

完成字符統計后,我們定義變量maxCharmaxCount,分別用于保存出現次數最多的字符和該字符出現的次數。初始時,將maxCount設置為0。

然后,我們使用另一個循環遍歷count數組,找到出現次數最多的字符。如果當前字符出現的次數大于maxCount,則更新maxCountmaxChar的值。

最后,我們使用printf函數輸出maxCharmaxCount的值,并在中間加上一個空格。

你可以根據需要使用上述示例代碼,并根據題目要求進行適當的修改。記得在編譯和運行代碼之前,確保你的編譯環境已經配置好,并且包含了必要的頭文件。

第2題:圖像處理

給定n行m列的圖像各像素點的灰度值,要求用如下方法對其進行模糊化處理:
1.四周最外側的像素點灰度值不變;
2.中間各像素點新灰度值為該像素點及其上下左右相鄰四個像素點原灰度值的平均(舍入到最接近的整數)。
時間限制:1000
內存限制:65536
輸入
第一行包含兩個整數n和m,表示圖像包含像素點的行數和列數。1 <= n <= 100,1 <= m <= 100。 接下來n行,每行m個整數,表示圖像的每個像素點灰度。相鄰兩個整數之間用單個空格隔開,每個元素均在0~255之間。
輸出
n行,每行m個整數,為模糊處理后的圖像。相鄰兩個整數之間用單個空格隔開。
樣例輸入
4 5
100 0 100 0 50
50 100 200 0 0
50 50 100 100 200
100 100 50 50 100
樣例輸出
100 0 100 0 50
50 80 100 60 0
50 80 100 90 200
100 100 50 50 100

下面是一個使用C語言編寫的圖像模糊處理問題的程序的示例代碼:

#include <stdio.h>int main() {int n, m;scanf("%d %d", &n, &m);int image[n][m];// 讀取圖像像素值for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {scanf("%d", &image[i][j]);}}int blurredImage[n][m];// 模糊化處理for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (i == 0 || i == n - 1 || j == 0 || j == m - 1) {// 四周最外側的像素點保持不變blurredImage[i][j] = image[i][j];} else {// 中間像素點的灰度值為周圍五個像素點的平均值blurredImage[i][j] = (image[i][j] + image[i - 1][j] + image[i + 1][j] + image[i][j - 1] + image[i][j + 1]) / 5;}}}// 輸出模糊處理后的圖像for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {printf("%d", blurredImage[i][j]);if (j < m - 1) {printf(" ");}}printf("\n");}return 0;
}

在上述代碼中,我們首先使用scanf函數讀取圖像的行數n和列數m

然后,我們定義一個二維數組image來保存圖像的像素值。

接下來,我們使用兩個嵌套的循環讀取輸入的像素值,并將其保存到image數組中。

然后,我們定義另一個二維數組blurredImage來保存模糊處理后的圖像像素值。

接下來,我們使用兩個嵌套的循環遍歷圖像的每個像素點。如果當前像素點是圖像的四周最外側的像素點,則將其灰度值保持不變;否則,將當前像素點及其上下左右相鄰的四個像素點的灰度值相加,然后除以5取整,得到模糊處理后的新灰度值。

完成模糊處理后,我們使用兩個嵌套的循環遍歷blurredImage數組,并使用printf函數輸出模糊處理后的圖像像素值。在每行的輸出中,相鄰的兩個像素值之間用一個空格隔開,每行結束后輸出一個換行符。

你可以根據需要使用上述示例代碼,并根據題目要求進行適當的修改。記得在編譯和運行代碼之前,確保你的編譯環境已經配置好,并且包含了必要的頭文件。

第3題:替換單詞

輸入一個字符串,以回車結束(字符串長度<=100)。該字符串由若干個單詞組成,單詞之間用一個空格隔開,所有單詞區分大小寫。現需要將其中的某個單詞替換成另一個單詞,并輸出替換之后的字符串。
時間限制:1000
內存限制:65536
輸入
輸入包括3行, 第1行是包含多個單詞的字符串 s;
第2行是待替換的單詞a(長度 <= 100);
第3行是a將被替換的單詞b(長度 <= 100).
s, a, b 最前面和最后面都沒有空格.
輸出
輸出只有 1 行,將s中所有單詞a替換成b之后的字符串。
樣例輸入
You want someone to help you
You
I
樣例輸出
I want someone to help you

下面是一個使用C語言編寫的替換單詞問題的程序的示例代碼:

#include <stdio.h>
#include <string.h>void replaceWord(char *str, const char *oldWord, const char *newWord) {char *pos, temp[100];int index = 0;int oldWordLen = strlen(oldWord);// 在字符串中找到要替換的單詞,并將其替換為新單詞while ((pos = strstr(str, oldWord)) != NULL) {strcpy(temp, str);index = pos - str;str[index] = '\0';strcat(str, newWord);strcat(str, temp + index + oldWordLen);}
}int main() {char str[1000];char oldWord[100], newWord[100];// 讀取輸入的字符串、待替換的單詞和替換后的單詞fgets(str, sizeof(str), stdin);fgets(oldWord, sizeof(oldWord), stdin);fgets(newWord, sizeof(newWord), stdin);// 去除字符串中的換行符str[strcspn(str, "\n")] = '\0';oldWord[strcspn(oldWord, "\n")] = '\0';newWord[strcspn(newWord, "\n")] = '\0';// 替換單詞replaceWord(str, oldWord, newWord);// 輸出替換后的字符串printf("%s\n", str);return 0;
}

在上述代碼中,我們首先定義了一個replaceWord函數,用于在字符串中替換指定的單詞。

replaceWord函數中,我們使用strstr函數在字符串中查找要替換的單詞的位置。如果找到了要替換的單詞,我們將字符串切割成三部分:替換位置之前的部分、替換位置的單詞、替換位置之后的部分。然后,我們使用strcpy函數將字符串的前半部分復制到臨時數組temp中,使用strcat函數將新單詞和剩余部分拼接到字符串中,以完成替換。

main函數中,我們首先定義了字符數組stroldWordnewWord,分別用于保存輸入的字符串、待替換的單詞和替換后的單詞。

然后,我們使用fgets函數逐行讀取輸入的字符串、待替換的單詞和替換后的單詞。注意,fgets函數會讀取換行符,因此我們需要使用strcspn函數將換行符替換為字符串結束符\0

接下來,我們調用replaceWord函數替換字符串中的單詞。

最后,我們使用printf函數輸出替換后的字符串。

你可以根據需要使用上述示例代碼,并根據題目要求進行適當的修改。記得在編譯和運行代碼之前,確保你的編譯環境已經配置好,并且包含了必要的頭文件。

第4題:偶數降序輸出

給定一個長度為N (不大于500) 的正整數序列,請將其中的所有偶數取出,并按降序輸出。
輸入描述:
共兩行;第一行為N;第二行為N個正數,其間用空格間隔
輸出描述:
降序輸出的偶數序列,數與數之間用空格間隔
數據保證至少有一個偶數
樣例輸入:
10
1 3 2 6 5 4 9 8 7 10
樣例輸出:
10 8 6 4 2

下面是一個使用C語言編寫的偶數降序輸出問題的程序的示例代碼:

#include <stdio.h>void bubbleSort(int arr[], int n) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] < arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}int main() {int N;scanf("%d", &N);int sequence[N];int evenCount = 0;// 讀取序列并篩選出偶數for (int i = 0; i < N; i++) {scanf("%d", &sequence[i]);if (sequence[i] % 2 == 0) {evenCount++;}}int evenNumbers[evenCount];int index = 0;// 將偶數存儲到新數組evenNumbers中for (int i = 0; i < N; i++) {if (sequence[i] % 2 == 0) {evenNumbers[index] = sequence[i];index++;}}// 使用冒泡排序對偶數進行降序排序bubbleSort(evenNumbers, evenCount);// 輸出降序排列的偶數序列for (int i = 0; i < evenCount; i++) {printf("%d", evenNumbers[i]);if (i < evenCount - 1) {printf(" ");}}printf("\n");return 0;
}

在上述代碼中,我們首先使用scanf函數讀取輸入的整數N,表示序列的長度。

然后,我們定義一個數組sequence來保存輸入的正整數序列,并定義一個變量evenCount來記錄偶數的個數。

接下來,我們使用一個循環讀取輸入的正整數序列,并在讀取的同時判斷每個數是否為偶數,如果是偶數,則將evenCount加1。

然后,我們定義一個新的數組evenNumbers,其大小為evenCount,用于存儲篩選出的偶數。

接著,我們使用另一個循環將偶數存儲到evenNumbers數組中。

之后,我們使用冒泡排序算法對evenNumbers數組進行降序排序。

最后,我們使用一個循環輸出降序排列的偶數序列,每個數之間用空格隔開。

你可以根據需要使用上述示例代碼,并根據題目要求進行適當的修改。記得在編譯和運行代碼之前,確保你的編譯環境已經配置好,并且包含了必要的頭文件。

第5題:滿足條件的數的累加2

現有n個整數,將其中個位數為k的數進行累加求和
輸入
第一行一個整數n。第二行n個非負整數,以空格分割,每個數不大于100000。第三行一個整數k。
輸出
輸出滿足題目要求的累加和
樣例輸入
10
2 5 7 17 11 18 4 27 1 7
7
樣例輸出
58

下面是一個使用C語言編寫的滿足條件的數的累加求和問題的程序的示例代碼:

#include <stdio.h>int main() {int n;scanf("%d", &n);int numbers[n];int k;scanf("%d", &k);// 讀取n個非負整數for (int i = 0; i < n; i++) {scanf("%d", &numbers[i]);}int sum = 0;// 對滿足個位數為k的數進行累加求和for (int i = 0; i < n; i++) {if (numbers[i] % 10 == k) {sum += numbers[i];}}// 輸出累加和printf("%d\n", sum);return 0;
}

在上述代碼中,我們首先使用scanf函數讀取輸入的整數n,表示非負整數的個數。

然后,我們定義一個數組numbers來保存輸入的非負整數序列。

接下來,我們使用一個循環讀取輸入的非負整數序列,并將每個數存儲到numbers數組中。

接著,我們使用scanf函數讀取輸入的整數k,表示要求個位數為k的數。

然后,我們定義一個變量sum并初始化為0,用于存儲滿足條件的數的累加和。

之后,我們使用一個循環遍歷numbers數組,并判斷每個數的個位數是否為k,如果滿足條件,則將該數累加到sum中。

最后,我們使用printf函數輸出累加和sum

你可以根據需要使用上述示例代碼,并根據題目要求進行適當的修改。記得在編譯和運行代碼之前,確保你的編譯環境已經配置好,并且包含了必要的頭文件。

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

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

相關文章

NFT Insider#102:The Sandbox重新上線LAND橋接服務,YGG加入Base生態

引言&#xff1a;NFT Insider由NFT收藏組織WHALE Members(https://twitter.com/WHALEMembers)、BeepCrypto&#xff08;https://twitter.com/beep_crypto&#xff09;聯合出品&#xff0c;濃縮每周NFT新聞&#xff0c;為大家帶來關于NFT最全面、最新鮮、最有價值的訊息。每期周…

Qt在mac安裝

先在app store下載好Xcode 打開Xcode 隨便建個文件給它取個名字找個地方放提醒沒建立git link,不用理他打開終端, 輸入/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Android Settings 無障礙設置顯示大小頁面重復加載問題

基于Android 11&#xff0c;跟蹤源碼 顯示大小頁面 packages/apps/Settings/src/com/android/settings/display/PreviewSeekBarPreferenceFragment.java 通過commit() 提交更新頁面顯示大小。該方法是是在其父類PreviewSeekBarPreferenceFragment 實現調用。 基類預覽滑動進度…

leetcode做題筆記80刪除有序數組中的重復項 II

給你一個有序數組 nums &#xff0c;請你 原地 刪除重復出現的元素&#xff0c;使得出現次數超過兩次的元素只出現兩次 &#xff0c;返回刪除后數組的新長度。 不要使用額外的數組空間&#xff0c;你必須在 原地 修改輸入數組 并在使用 O(1) 額外空間的條件下完成。 說明&…

【數據庫】P3 排序檢索數據 ORDER BY

ORDER BY 單個列排序多個列排序按列位置排序指定排序方向 ASC/DESC指定多個列進行排序 單個列排序 為了明確地排序 SELECT 語句檢索出的數據&#xff0c;可使用 ORDER BY 子句。ORDER BY 子句取一個或多個列的名字&#xff0c;據此對輸出進行排序。 例&#xff1a; DBMS 軟件…

RDMA在典型場景下的技術應用分析與探索

本文首發于&#xff1a;RDMA在典型場景下的技術應用分析與探索 1.業務適配RDMA類型 RDMA傳輸的適配&#xff0c;從業務場景的使用角度來看&#xff0c;大致可分為如下幾種類型。 場景一&#xff1a;機器學習、分布式存儲等場景&#xff0c;使用社區成熟的方案&#xff0c;如在…

c++小技巧13:中文輸出(編碼轉漢字)

目錄 1.前言 2.正文 1.直接輸出: 2.間接輸出 3.編碼(?)轉漢字&#xff08;建議直接看這個&#xff09; (書簽) 3.后文 1.前言 &#xff08;os:感覺標題中 間接不太準確&#xff0c;主要是找不到精準的用詞&#xff0c;說明一下&#xff1a;就是在不用中文的方式下輸出…

ibmtpm-TPMCmd 編譯

HASH_LIBOssl SYM_LIBOssl MATH_LIBOssl tpm工程: platform.lib libeay32.lib Windows 編譯 openssl-1.0.2p&#xff08;libeay32.lib、ssleay32.lib&#xff09;靜態庫 32/64、debug/release、MT/MTd D:\installed\mingw64\opt\bin\libeay32.dll

使用Mix-in類組合功能

為什么需要Mix-in? 在學習面向對象時我們知道&#xff0c;類可以通過繼承類獲得屬性和方法&#xff0c;通過繼承可以減少重復代碼、提高復用率。Python支持多繼承&#xff0c;一個類可以通過繼承多個類來得到它們的功能。但多繼承會帶來一些問題&#xff0c;比如屬性沖突。那…

鏈表之第一回

歡迎來到我的&#xff1a;世界 收錄專欄&#xff1a;鏈表 希望作者的文章對你有所幫助&#xff0c;有不足的地方還請指正&#xff0c;大家一起學習交流 ! 目錄 前言第一題&#xff1a;刪除鏈表的倒數第n個節點第二題&#xff1a;鏈表的中間結點第三題&#xff1a;合并兩個排序…

如何在 iOS 上安裝并使用 ONLYOFFICE 文檔

借助 iOS 版文檔應用&#xff0c;您可在移動端設備上訪問存儲于 ONLYOFFICE 賬戶中的文件&#xff0c;查看和編輯現有文本文檔、電子表格和演示文稿&#xff0c;創建新文檔并對其進行整理&#xff0c;以及連接第三方云存儲服務。您可與其他門戶網站用戶協作編輯文檔&#xff0c…

數據結構-棧和隊列

目錄 棧的概念 棧的使用 ?編輯 模擬實現棧 中綴表達式轉后綴表達式 括號匹配 出棧入棧次序匹配 隊列概念 隊列的使用 棧的概念 棧是一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素的操作.進行數據插入和刪除操作的一端稱為棧頂,;另一端稱為棧底.棧中的數據…

【Vue-Router】嵌套路由

footer.vue <template><div><router-view></router-view><hr><h1>我是父路由</h1><div><router-link to"/user">Login</router-link><router-link to"/user/reg" style"margin-left…

面試攻略,Java 基礎面試 100 問(十五)

final, finally, finalize 的區別? final&#xff1a;修飾符&#xff08;關鍵字&#xff09;有三種用法&#xff1a;如果一個類被聲明為 final&#xff0c;意味著它不能再派生出新的子類&#xff0c;即不能被繼承&#xff0c;因此它和 abstract 是反義詞。將變量聲明為 final…

動手學DL——MLP多層感知機【深度學習】【PyTorch】

文章目錄 4、多層感知機&#xff08; MLP&#xff09;4.1、多層感知機4.1.1、隱層4.1.2、激活函數 σ 4.2、從零實現多層感知機4.3、簡單實現多層感知機4.4、模型選擇、欠擬合、過擬合4.5、權重衰退4.6、丟失法|暫退法&#xff08;Dropout&#xff09;4.6.1、dropout 函數實現4…

大數據--難點--地圖的制作

地圖一直是亮點也是難點&#xff0c;剛剛進公司的時候也很難懂~~做出來的也很難看 純CSS3使用vw和vh視口單位實現h5頁面自適應&#xff0c;gulp自動監聽sass改動并保存到css中 當修改了sass里面的代碼后&#xff0c;gulp會自動監聽修改內容并同名保存到css文件夾中&#xff0…

C#字符串占位符替換

using System;namespace myprog {class test{static void Main(string[] args){string str1 string.Format("{0}今年{1}歲&#xff0c;身高{2}cm&#xff0c;月收入{3}元&#xff1b;", "小李", 23, 177, 5000);Console.WriteLine(str1);Console.ReadKey(…

02-C++數據類型-高級

數據類型-高級 4、復合類型 4.4、結構簡介 struct inflatable {char name[20];float vol;double price; };inflatable vincent; //C struct inflatable goose; //C例子 // structur.cpp -- a simple structure #include <iostream> struct inflatable // structu…

B057-spring增強 依賴注入 AOP 代理模式 創建Bean

目錄 AOP概念代理模式引出AOP實現方式xml方式實現注解方式實現 AOP 概念 事務管理&#xff1a;比如可以抽取try catch的重復代碼 日志監控&#xff1a;比如業務邏輯前后打印關于當前訂單數量的日志&#xff0c;了解業務做了什么 性能監控&#xff1a;比如業務前后打印時間&…

浪潮信息趙帥:多元算力時代 開源開放的OpenBMC成為服務器管理優先解

“多元算力時代下&#xff0c;大規模的異構服務器設備面臨多種處理器架構、多種設備協議、不同管理芯片兼容的系統化設計挑戰&#xff0c;管理固件也迎來新的變革。開源開放的OpenBMC&#xff0c;以創新的分層解耦軟件架構&#xff0c;兼容不同處理器架構、算力平臺和管理芯片&…