CSP-J 2019 入门级 第一轮(初赛) 完善程序(1)

server/2024/9/20 3:52:58/ 标签: csp初赛

【题目】

CSP-J 2019 入门级 第一轮(初赛) 完善程序(1)
1.(矩阵变幻)有一个奇幻的矩阵,在不停的变幻,其变幻方式为:
数字 0 变成矩阵
0 0
0 1
数字 1 变成矩阵
1 1
1 0
最初该矩阵只有一个元素 0,变幻 n 次后,矩阵会变成什么样?
例如,矩阵最初为:[0];
矩阵变幻 1 次后:
0 0
0 1
矩阵变幻 2 次后:
0 0 0 0
0 1 0 1
0 0 1 1
0 1 1 0
输入一行一个不超过 10 的正整数 n。输出变幻 n 次后的矩阵。
试补全程序。

#include <cstdio>
using namespace std;
int n;
const int max_size = 1 << 10;int res[max_size][max_size];void recursive(int x, int y, int n, int t) {if (n == 0) {res[x][y] =;return;}int step = 1 << (n - 1);recursive(, n - 1, t);recursive(x, y + step, n - 1, t);recursive(x + step, y, n - 1, t);recursive(, n - 1, !t);
}int main() {scanf("%d", &n);recursive(0, 0,);int size =;for (int i = 0; i < size; i++) {for (int j = 0; j < size; j++)printf("%d", res[i][j]);puts("");}return 0;
}

1.①处应填()
A. n%2
B. 0
C. t
D. 1

2.②处应填()
A. x-step,y-step
B. x,y-step
C. x-step,y
D. x,y

3.③处应填()
A. x-step,y-step
B. x+step,y+step
C. x-step,y
D. x,y-step

4.④处应填()
A. n-1,n%2
B. n,0
C. n,n%2
D. n-1,0

5.⑤处应填()
A. 1<<(n+1)
B. 1<<n
C. n+1
D. 1<<(n-1)

【题目考点】

1. 递归:求分形图

【解题思路】

观察可知,
变化0次,得到的矩阵为 1 ∗ 1 1*1 11矩阵。
变化1次,得到的矩阵为 2 ∗ 2 2*2 22矩阵。
变化2次,得到的矩阵为 4 ∗ 4 4*4 44矩阵。
变化3次,得到的矩阵为 8 ∗ 8 8*8 88矩阵。

变化n次,得到的矩阵为 2 n ∗ 2 n 2^n*2^n 2n2n矩阵。

最后遍历输出时,行、列下标应该从0到 2 n − 1 2^n-1 2n1循环,所以size应该为 2 n 2^n 2n1<<n的值就是 2 n 2^n 2n,第(5)空选B。

void recursive(int x, int y, int n, int t) {if (n == 0) {res[x][y] =;return;}int step = 1 << (n - 1);recursive(, n - 1, t);recursive(x, y + step, n - 1, t);recursive(x + step, y, n - 1, t);recursive(, n - 1, !t);
}

递归算法是将规模较大的问题分为几个与原问题形式类似但规模更小的子问题。
下面的几个递归调用就是在解决子问题。
首先step的值为 2 n − 1 2^{n-1} 2n1,这和主函数中的size的意义是相同的,表示当前子矩阵的行数和列数,因此第三个参数n指的是矩阵变换的次数。
要想得到当前变换n次后得到的矩阵,需要先得到4个变换n-1次后得到的矩阵。这四个子矩阵应该分别在变换n次后得到的矩阵的左上,左下,右上,右下四个方向的位置。
当n为0时,该矩阵为 1 ∗ 1 1*1 11矩阵,只有一个元素,该元素的位置为x行y列,res[x][y]这一位置的值为空(1)要填的表达式。
空(1)的选项有:A. n%2,此时n为0,如果填n%2,那么每个位置的值都为0。如果填0或1,每个位置的值都相同。这与行列数大于1的矩阵中有0也有1相矛盾,因此res[x][y]的值只能是t,空(1)选C。
观察接下来的递归调用,有recursive(x, y + step, n - 1, t);recursive(x + step, y, n - 1, t);,其中参数x、y的值分别为x, y+step与x+step, y。结合划分子矩阵的方案,可以知道,(x, y+step)是右上方子矩阵的左上角位置,(x+step, y)是左下方子矩阵的左上角的位置,因此第(2)空应该填左上方子矩阵左上角位置(x, y),选D。第(3)空应该填右下方子矩阵的左上角位置(x+step, y+step) ,选B。
在这里插入图片描述
至于第4个参数t,当n为0时,t就是x,y位置的值。
当n>0时,t决定了该矩阵的形式。在当前题目的定义下,一个 2 n ∗ 2 n 2^n*2^n 2n2n的矩阵的形式有两种,一种左上角为0,一种左上角为1。

比如n为1时,
左上角为0的矩阵为
0 0
0 1
左上角为1的矩阵为
1 1
1 0

将整个 2 n ∗ 2 n 2^n*2^n 2n2n矩阵分成4个 2 n − 1 ∗ 2 n − 1 2^{n-1}*2^{n-1} 2n12n1的矩阵,其中左上、右上、左下的子矩阵的左上角的值和整个矩阵左上角的值相同,只有右下方子矩阵左上角的值与整个矩阵左上角的值不同。
因此t表示的就是矩阵左上角的值。当前函数传入t,指的是当前矩阵左上角值为t,而后前三次递归调用传入的都是t,表示左上、右上、左下的子矩阵的左上角的值和整个矩阵左上角的值相同,第四题递归调用时传入的是!t,表示右下方子矩阵左上角的值与整个矩阵左上角的值不同。
所以主函数中调用recursive函数的写法为:recursive(0, 0, ④);,前两个参数是x和y,表示左上角位置为(0,0),空(4)处需要填第3和第4个参数,矩阵需要变换n次,所以第三个参数填n。整个矩阵的左上角为0,所以第四个参数填0。第(4)空选B

【答案】

  1. C
  2. D
  3. B
  4. B
  5. B

http://www.ppmy.cn/server/117790.html

相关文章

【Kubernetes】常见面试题汇总(十八)

目录 55.简述 Kubernetes 共享存储的作用&#xff1f; 56.简述 Kubernetes 数据持久化的方式有哪些&#xff1f; 57.简述 Kubernetes PV 和 PVC &#xff1f; 58.简述 Kubernetes PV 生命周期内的阶段&#xff1f; 55.简述 Kubernetes 共享存储的作用&#xff1f; Kubernet…

拳皇97确反笔记

之前有做过其他博客&#xff0c;分别是拳皇97整体和人物两个维度来的。 后来玩了一些局&#xff0c;也看了一些比赛&#xff0c;认为确反也是非常重要的&#xff0c;所以做个笔记吧。 有很多破绽很大的确反&#xff0c;可能就不说了&#xff0c;因为都知道怎么确反。 文章目录…

707. 设计链表

设计链表 你可以选择使用单链表或者双链表&#xff0c;设计并实现自己的链表。 单链表中的节点应该具备两个属性&#xff1a;val 和 next 。val 是当前节点的值&#xff0c;next 是指向下一个节点的指针/引用。 如果是双向链表&#xff0c;则还需要属性 prev 以指示链表中的…

[数据集][目标检测]烟叶病害检测数据集VOC+YOLO格式612张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;612 标注数量(xml文件个数)&#xff1a;612 标注数量(txt文件个数)&#xff1a;612 标注类别…

JavaSE:8、包装类

1、基本类型包装类 包装类于将基本数据类型&#xff08;如 int、float、char 等&#xff09;转换为对应的对象类型 Java 提供了以下包装器类型&#xff0c;与基本数据类型一一对应&#xff1a; Byte&#xff08;对应 byte&#xff09;Short&#xff08;对应 short&#xff09;…

基于C#+SQLServer 2005实现(CS界面)校园卡消费信息系统

校园卡消费信息管理系统 一、前言 1.1 选题说明 校园卡消费信息系统是一个实用并且与我们的学校生活密切相关的管理信息系统&#xff1b;如果能够很好的研究、开发并加以利用&#xff0c;校园卡的相关业务会变得更加简单、学生能更便利地进行消费同时准确了解自己的消费情况…

Vue中的事件修饰符是什么,它们的作用是什么?

在Vue中&#xff0c;事件修饰符是一种用于处理事件的方法&#xff0c;它们可以帮助我们更有效地处理事件&#xff0c;同时提高代码的可读性和可维护性。Vue提供了几个内置的事件修饰符&#xff0c;包括$event、.stop、.prevent、.capture、.self和.once。 1. $event&#xff1…

结构体内存对齐

目录 一、什么是结构体内存对齐二、为什么要结构体内存对齐三、对齐系数四、结构体对齐规则1、例一&#xff1a;文章开头的例子2、例二&#xff1a;稍微复杂的情况3、结合 union 和 struct4、结构体嵌套 一、什么是结构体内存对齐 进入讲解前&#xff0c;先看一段 C 代码&…

DAY13信息打点-Web 应用源码泄漏开源闭源指纹识别GITSVNDS备份

#知识点 0、Web架构资产-平台指纹识别 1、开源-CMS指纹识别源码获取方式 2、闭源-习惯&配置&特性等获取方式 3、闭源-托管资产平台资源搜索监控 演示案例&#xff1a; ➢后端-开源-指纹识别-源码下载 ➢后端-闭源-配置不当-源码泄漏 ➢后端-方向-资源码云-源码泄漏 …

postgresql|数据库|pg_repack和idle_in_transaction_session_timeout参数的关系

一、问题描述 在使用pg_repack这个工具做数据库的表膨胀清理过程中&#xff0c;经常会遇到类似这样的警告&#xff1a; 这里的警告表明在膨胀治理的时候&#xff0c;此表遇到了事务阻塞&#xff0c;而此时我们有三种选择&#xff0c;第一个选择是等待该事务结束&#xff0c;第…

机器学习 vs. 深度学习

目录 引言 机器学习 深度学习 机器学习与深度学习的区别概览 引言 随着人工智能技术的发展&#xff0c;机器学习&#xff08;Machine Learning&#xff09;和深度学习&#xff08;Deep Learning&#xff09;成为了当今最热门的研究领域之一。尽管这两个术语经常被交替使用&…

【代码随想录训练营第42期 Day57打卡 - 图论Part7 - Prim算法与Kruskal算法

目录 一、Prim算法 二、题目与题解 题目&#xff1a;卡码网 53. 寻宝 题目链接 题解1&#xff1a;Prim算法 题解2&#xff1a;Prim算法优化 题解3&#xff1a;Kruskal算法 三、小结 一、Prim算法与Kruskal算法 Prim算法是一种贪心算法&#xff0c;用于求解加权无向图的…

构建高效 Python Web API:RESTful 设计与 GraphQL 实践

构建高效 Python Web API&#xff1a;RESTful 设计与 GraphQL 实践 在现代 Web 开发中&#xff0c;API 是前后端通信的核心枢纽&#xff0c;设计一个高效且易于扩展的 API 是保证系统良好运行的基础。本文详细探讨 RESTful API 的设计准则&#xff0c;如何生成 API 文档&#…

HCIP--<OSPF2>

目录 一&#xff0c;OSPF的不规则区域 1&#xff09;远离骨干区域的非骨干区域 2&#xff09;不连续骨干区域(和上面一样) 二&#xff0c;OSPF数据库表 三。优化OSPF的LSA&#xff08;缺少LSA的更新量&#xff09; [1]手工汇总&#xff1a;减少骨干区域的LSA [2]特殊区域&…

轨道列车舱门检测系统源码分享

轨道列车舱门检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

GitHub图床

GitHub图床 文章目录 GitHub图床图床介绍Github访问GitHub手动修改hostsgithub520 加速器创建账户创建仓库创建token PicGoTypora 图床介绍 图床 存放图片的地方 为什么设置图床呢 在我认识图床之前, 有一个问题 [^放在typora上面的图片, 其实是一个链接, 并且将图片存放在本地…

TS - tsconfig.json 和 tsconfig.node.json 的关系,如何在TS 中使用 JS 不报错

目录 1&#xff0c;前言2&#xff0c;二者关系2.1&#xff0c;使用 3&#xff0c;遇到的问题3.1&#xff0c;TS 中使用 JS 1&#xff0c;前言 通过 Vite 创建的 Vue3 TS 项目&#xff0c;根目录下会有 tsconfig.json 和 tsconfig.node.json 文件&#xff0c;并且存在引用关系…

51单片机+proteus+实验(I2C和蜂鸣器)

目录 1.蜂鸣器 1.1基本概念 1.1.1蜂鸣器的简介 1.1.2蜂鸣器的硬件原理 1.1.3蜂鸣器的音色 1.2代码 1.2.1不同音色驱动 1.2.2使用Music Encode1软件来生成音乐 1.3proteus仿真 2.I2C 2.1基本概念 2.1.1 I2C的基本概念 2.1.2 I2C的通讯时序 2.1.3AT24C02数据帧 ​编…

Qt_显示类控件

目录 一、QLabel 1、QLabel属性介绍 2、textFormat文本格式 3、pixmap标签图片 3.1 resizeEvent 4、QFrame边框 5、alignment文本对齐 6、wordWrap自动换行 7、indent设置缩进 8、margin设置边距 9、buddy设置伙伴 二、QLCDNumber 1、QLCDNumber属性介绍 2、实…

【AI大模型】ChatGPT模型原理介绍(下)

目录 &#x1f354; GPT-3介绍 1.1 GPT-3模型架构 1.2 GPT-3训练核心思想 1.3 GPT-3数据集 1.4 GPT-3模型的特点 1.5 GPT-3模型总结 &#x1f354; ChatGPT介绍 2.1 ChatGPT原理 2.2 什么是强化学习 2.3 ChatGPT强化学习步骤 2.4 监督调优模型 2.5 训练奖励模型 2.…