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.mzph.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…

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;留言 主要内容实现了日志代码设计的实…

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;以及各种资源分…

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 …

数据中心GPU集群高性能组网技术分析

数据中心GPU集群组网技术是指将多个GPU设备连接在一起&#xff0c;形成一个高性能计算的集群系统。通过集群组网技术&#xff0c;可以实现多个GPU设备之间的协同计算&#xff0c;提供更大规模的计算能力&#xff0c;适用于需要大规模并行计算的应用场景。 常用的组网技术&…

1209. 带分数 刷题笔记

思路 暴力匹配 读入目标数 n 看n是否与ab/c相等 因为c里面的除法是整除 我们将 nab/c 转换为 c*na*cb 那么如何获得a,b&#xff0c;c 依题意 a&#xff0c;b&#xff0c;c三个数由1-9九个数字组成 且每个数字只能出现一次 由此 我们可以搜出123456789的全部排列方式…

我做的app上架应用市场一天,快破400下载量,0差评

上集说到&#xff0c;我做了一个叫QB音乐的安卓app&#xff0c;经过一段时间的自我使用与测试终于算发布了。我昨天顺便把它上架了奇妙应用市场&#xff0c;截止目前3月1号过去了一天&#xff0c;下载量快到400&#xff0c;0差评。看来还是能正常使用的。 一、为什么做这个ap…