2022年CSP-J認證 CCF信息學奧賽C++ 中小學初級組 第一輪真題-完善程序題解析

2022CCF認證第一輪(CSP-J)真題

三、完善程序題

第一題?枚舉因數

從小到大打印正整數n的所有正因數。試補全枚舉程序

#include <iostream>
using namespace std;int main(){int n;cin >> n;vector<int> fac;fac.reserve((int)ceil(sqrt(n)));int i;for (i= 1;i*i< n; ++i){if (①) {fac.push back(i);}}for (int k = 0; k< fac.size();++k){cout << ② << " ";}if (③) {cout <<④<<" ";}for (int k= fac.size()-1; k >= 0; --k){cout <<⑤<<;}
}

程序分析:此程序的功能是找出一個給定數n的所有因子。程序的思路是,遍歷從1到sqrt(n)的所有數,如果n能被該數整除,則將該數添加到一個vector中。然后再遍歷vector,輸出所有的因子,同時輸出n除以該因子的結果,即另一個因子。 具體分析如下:

  • 首先,程序通過cin讀取一個整數n。
  • 然后,定義一個vector<int>類型的變量fac來保存因子。
  • 使用一個for循環,從1開始遍歷到sqrt(n)。
  • 表達式i*i < n保證了i的取值范圍在[1, sqrt(n))之間。
  • 在循環中,使用if條件判斷n是否能被i整除。
  • 如果能整除,則將i添加到fac vector中。
  • 循環結束后,通過一個for循環遍歷fac vector,按順序輸出所有的因子。
  • 如果i*i等于n,說明n是一個完全平方數,此時只需要輸出一個因子即可。
  • 最后,通過一個逆向的for循環遍歷fac vector,輸出n除以每個因子的結果,即另一個因子。

單選題

①處應該填

A.?n%i== 0
B.?n%i== 1
C.?n % (i-1)== 0
D.?n % (i-1)== 1

答案:A

答案分析:從程序分析中可以得知此處應該是A

②處應該填

A.?n / fac[k]
B.?fac[k]
C.?fac[k]-1
D.?n / (fac[k]-1)

答案:B

答案分析:從程序分析中可以得知此處應該是B

③處應該填

A.?(i-1)*(i-1)== n
B.?(i-1)*i==n
C.?i*i== n
D.?i*(i-1)== n

答案:C

答案分析:從程序分析中可以得知此處應該是C

④處應該填

A. n-i
B.?n-i+1
C. i-1
D. i

答案:D

答案分析:從程序分析中可以得知此處應該是D

⑤處應該填

A.?n / fac[k]
B.?fac[k]
C.?fac[k]-1
D.?n / (fac[k]-1)

答案:A

答案分析:從程序分析中可以得知此處應該是A

第二題?洪水填充

現有用字符標記像素顏色的 8x8 圖像。顏色填充的操作描述如下:給定起始像素的位置和待填充的顏色將起始像素和所有可達的像素(可達的定義:經過一次或多次的向上、下、左、右四個方向移動所能到達且終點和路徑上所有像素的顏色都與起始像素顏色相同),替換為給定的顏色。試補全程序。

#include<iostream>
using namespace std;
const int ROWS = 8;
const int COLS = 8;struct Point {int r, c;Point(int r, int c): r(r), c(c){}
};bool is_valid(char image[ROWS][COLS], Point pt,int prev_color, int new_color){int r= pt.r;int c = pt.c;return (0 <= r && r < ROWS && 0 <=c && c < COLS && ① && image[r][c] != new_color);
}void flood_fill(char image[ROWS][COLS], Point cur, int new_color){queue<Point> queue;queue.push(cur);int prev_color = image[cur.r][cur.c];②;while (!queue.empty()){Point pt = queue.front();queue.pop();Point points[4]={③,Point(pt.r - 1, pt.c),Point(pt.r, pt.c + 1), Point(pt.r, pt.c - 1)};for (auto p : points){if (is_valid(image, p, prev_color, new_color)){④;⑤;}}}
}int main(){char image[ROWS][COLS] = {{'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g'},{'g', 'g', 'g', 'g', 'g', 'g', 'r', 'r'},{'g', 'r', 'r', 'g', 'g', 'r', 'g', 'g'},{'g', 'b', 'b', 'b', 'b', 'r', 'g', 'r'},{'g', 'g', 'g', 'b', 'b', 'r', 'g', 'r'},{'g', 'g', 'g', 'b', 'b', 'b', 'b', 'r'},{'g', 'g', 'g', 'g', 'g', 'b', 'g', 'g'},{'g', 'g', 'g', 'g', 'g', 'b', 'b', 'g'}};Point cur(4, 4);char new_color ='y';flood_fill(image, cur, new_color);for (int r= 0;r< ROWS; r++){for (int c = 0; c< COLS; c++){cout << image[r][c] << " ";}cout << endl;}return 0;
}
//輸出
//g g g g g g g g
//g g g g g g r r
//g r r g g r g g
//g y y y y r g r
//g g g y y r g r
//g g g y y y y r
//g g g g g y g g
//g g g g g y y g

程序分析:此程序實現了一個基于隊列的洪泛填充算法(BFS),用于填充一個8x8的字符矩陣。該算法從給定的起始點開始,將起始點的顏色替換為新的顏色,并向該點的上下左右四個鄰居點進行遍歷,如果鄰居點的顏色與起始點顏色相同且不等于新的顏色,則將鄰居點的顏色替換為新的顏色,并將鄰居點添加到隊列中繼續遍歷。 具體的步驟如下:

  • 定義一個結構體Point,用于表示矩陣中的一個點,包含行號r和列號c。
  • 定義一個函數is_valid,用于判斷一個點是否是有效的,即在矩陣范圍內,顏色與起始點顏色相同且不等于新的顏色。
  • 定義一個函數flood_fill,接受矩陣、起始點和新的顏色作為參數。
  • 首先創建一個隊列,并將起始點添加到隊列中。
  • 獲取起始點的顏色,并將起始點的顏色替換為新的顏色。
  • 使用while循環遍歷隊列,直到隊列為空。
  • 在每次循環中,取出隊列中的第一個點,并獲取其鄰居點。
  • 遍歷鄰居點,如果鄰居點是有效的,將其顏色替換為新的顏色,并將鄰居點添加到隊列中。
  • 在主函數main中,定義一個8x8的字符矩陣image,并初始化。
  • 創建一個起始點cur,坐標為(4, 4)。
  • 定義一個新的顏色new_color為'y'。
  • 調用flood_fill函數,將矩陣image從起始點cur開始進行洪泛填充。
  • 遍歷矩陣image,并輸出每個點的顏色。

單選題

①處應該填

A.?image[r][c]== prev_color
B.?image[r][c] != prev color
C.?image[r][c] == new_color
D.?image[r][c] != new_color

答案:A

答案分析:從程序分析中可以得知此處應該是起始點,答案A

②處應該填

A.?image[cur.r+1][cur.c]= new_color
B.?image[cur.r][cur.c]= new_color
C.?image[cur.r][cur.c+1]= new_color
D.?image[cur.r][cur.c]= prev_color

答案:B

答案分析:從程序分析中可以得知此處應該是起始點的顏色替換為新的顏色,答案B

③處應該填

A.?Point(pt.r, pt.c)
B.?Point(pt.r, pt.c+1)
C.?Point(pt.r+1, pt.c)
D.?Point(pt.r+1, pt.c+1)

答案:C

答案分析:從程序分析中可以得知此處應該是獲取相應的4個鄰居點,答案C

④處應該填

A.?prev_color = image[p.r][p.c]

B.?new_color = image[p.r][p.c]

C.?imagelp.r][p.c]= prev_color

D.?image[p.r][p.c]= new_color

答案:D

答案分析:從程序分析中可以得知此處應該是鄰居點替換為新的顏色,答案D

⑤處應該填

A.?queue.push(p)
B.?queue.push(pt)
C.?queue.push(cur)
D.?queue.push(Point(Rows,COLS))

答案:A

答案分析:從程序分析中可以得知此處應該是將鄰居點加入隊列中,答案A

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

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

相關文章

C++的引用

目錄 引用 常引用 指針與引用的關系 小拓展 引用的價值 做形參 傳值、傳引用的效率比較 做返回值 函數傳值返回 函數傳引用返回&#xff08;錯誤示范&#xff09; 野引用&#xff08;錯誤示范&#xff09; 引用的正常應用 值和引用作為返回值類型的性能比較 引用和…

spring-boot-starter-parent和spring-boot-dependencies介紹

springboot項目的pom文件中&#xff0c;我們經常看見這樣(下圖)兩種springboot的版本依賴管理方式&#xff1b;圖片中的這兩種依賴聲明方式任意用其中一種都可以。文章后面會簡單闡述一下區別和使用場景。 事例中完整的pom文件 <?xml version"1.0" encoding&quo…

阿爾卡特Adixen ADP/ADS 系列 2 干泵使用說明

阿爾卡特Adixen ADP/ADS 系列 2 干泵使用說明

HTML教程(3)——常用標簽(1)

一、圖片標簽 1.場景&#xff1a;在網頁中顯示圖片 2.基本寫法&#xff1a; <img src""> 3.特點&#xff1a;單標簽&#xff0c;img標簽需要展示對應的效果&#xff0c;需要借助其屬性進行設置 4常用屬性&#xff1a; src&#xff1a;其屬性值為目標圖片…

【框架】Spring 框架重點解析

Spring 框架重點解析 1. Spring 框架中的單例 bean 是線程安全的嗎&#xff1f; 不是線程安全的 Spring 框架中有一個 Scope 注解&#xff0c;默認的值是 singleton&#xff0c;即單例的&#xff1b;因為一般在 Spring 的 bean 對象都是無狀態的&#xff08;在生命周期中不被…

解決Mybatis報Type interface *.*Mapper is not known to the MapperRegis

解決Mybatis報Type interface *.*Mapper is not known to the MapperRegis 問題發現問題解決方法一&#xff1a;檢查Mapper文件的namespace路徑是否正確方法二&#xff1a;使用其他方法是否正確 問題發現 在學習MyBatis框架的時候&#xff0c;不使用 XML 構建 SqlSessionFacto…

字符串函數 sscanf() 詳解

什么是 sscanf() 函數&#xff1f; sscanf() 函數是 C 語言中的一個標準庫函數&#xff0c;它的作用是從一個字符串中按照指定的格式提取數據&#xff0c;并將其存儲到對應的變量中。它的原型如下&#xff1a; int sscanf(const char *str, const char *format, ...);其中&am…

Project_Euler-44 題解

Project_Euler-44 題解 題目 思路 題目給出了一個性質&#xff0c;讓我在對應性質的數據中找出目標值&#xff0c;這種問題首先想到的就是枚舉。 我們可以枚舉 P k P_k Pk? &#xff0c;對于每一個 P k P_k Pk? &#xff0c;我們再枚舉 P j P_j Pj?&#xff0c; P j P_…

【ue5】滑鏟系統藍圖筆記

大致邏輯如下&#xff1a; 一、導入動畫 滑鏟蹲待機蹲行走 導入到文件夾中 可以右鍵設置顏色&#xff0c;便于區分。 二、調整動畫 1.啟動根運動 啟動根運動后&#xff0c;人物才可以位移&#xff0c;不然只能在原地。 打開動畫序列&#xff0c;勾選啟用根運動Enabled…

用node或者vscode開啟一個簡單的本地server服務器,加載html網頁

使用Live Server 想要加載本地html頁面可以快速能讓它在你本地瀏覽器中打開&#xff0c;可以有好多種方式&#xff0c;如果你有使用vscode&#xff0c;可以安裝一個插件&#xff1a;Live Server&#xff0c;然后直接在vscode中直接右鍵就可以開啟這個服務&#xff1a; 安裝好之…

C++基于多設計模式下的同步異步日志系統day2

&#x1f4df;作者主頁&#xff1a;慢熱的陜西人 &#x1f334;專欄鏈接&#xff1a;C基于多設計模式下的同步&異步日志系統 &#x1f4e3;歡迎各位大佬&#x1f44d;點贊&#x1f525;關注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要內容實現了日志代碼設計的實…

在 Spring Boot 3.x 中使用 SpringDoc 2 / Swagger V3

SpringDoc V1 只支持到 Spring Boot 2.x springdoc-openapi v1.7.0 is the latest Open Source release supporting Spring Boot 2.x and 1.x. Spring Boot 3.x 要用 SpringDoc 2 / Swagger V3, 并且包名也改成了 springdoc-openapi-starter-webmvc-ui SpringDoc V2 https://s…

select,poll和epoll有什么區別

它們都是NIO中多路復用的三種實現機制&#xff0c;是由linux操作系統提供的。 用戶空間和內核空間&#xff1a;操作系統為了保證系統安全&#xff0c;將內核分為兩個部分&#xff0c;一個是用戶空間&#xff0c;一個是內核空間。用戶空間不能直接訪問底層的硬件設備&#xff0…

IT廉連看——Uniapp——配置文件pages

IT廉連看——Uniapp——配置文件pages [IT廉連看] 本堂課主要為大家介紹pages.json這個配置文件 一、打開官網查看pages.json可以配置哪些屬性。 下面邊寫邊講解 新建一個home頁面理解一下這句話。 以下一些頁面的通用配置 通用設置里我們可以對導航欄和狀態欄進行一些設…

Android修行手冊-集成Python開發環境

Unity3D特效百例案例項目實戰源碼Android-Unity實戰問題匯總游戲腳本-輔助自動化Android控件全解手冊再戰Android系列Scratch編程案例軟考全系列Unity3D學習專欄藍橋系列ChatGPT和AIGC &#x1f449;關于作者 專注于Android/Unity和各種游戲開發技巧&#xff0c;以及各種資源分…

Debezium發布歷史161

原文地址&#xff1a; https://debezium.io/blog/2023/09/13/debezium-2-4-beta2-released/ 歡迎關注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻譯&#xff0c;僅供參考&#xff0c;筆芯筆芯. Debezium 2.4.0.Beta2 Released September 13, 2023 by Chris Cranfo…

Apache Flink連載(三十五):Flink基于Kubernetes部署(5)-Kubernetes 集群搭建-1

?? 個人主頁:IT貧道-CSDN博客 ?? 私聊博主:私聊博主加WX好友,獲取更多資料哦~ ?? 博主個人B棧地址:豹哥教你學編程的個人空間-豹哥教你學編程個人主頁-嗶哩嗶哩視頻 目錄 ?編輯

Python爬蟲——Urllib庫-2

編解碼 問題引入 例如&#xff1a; https://www.baidu.com/s?wd章若楠 https://www.baidu.com/s?wd%E7%AB%A0%E8%8B%A5%E6%A5%A0 第二部分的一串亂碼就是章若楠 如果這里是寫的章若楠就會 產生這樣的錯誤 所以我們就可以使用get請求方式的quote方法了 get請求方式的q…

laravel ApiResponse接口統一響應封裝

一&#xff0c;新增接口返回碼配置文件 在config中新增配置文件apicode.php <?phpreturn [ apicodes>[/*** Message("OK")* 對成功的 GET、PUT、PATCH 或 DELETE 操作進行響應。也可以被用在不創建新資源的 POST 操作上*/HTTP_OK > 200,/*** Message(&qu…

使用el-form之表單校驗自動定位到報錯位置問題,,提升用戶體驗

需求描述 由于需要填寫的表單項太多&#xff0c;提交的時候校驗不通過&#xff0c; 如果沒填寫的表單項在最上面&#xff0c;用戶看不到不知道發生了啥&#xff0c; 所以需要將頁面滾動定位到第一個報錯的表單項位置&#xff0c;提升用戶體驗實現步驟 1. 給form表單添加ref …