数字方阵的旋转填充(递归方法)

2024-09-01 10:38

本文主要是介绍数字方阵的旋转填充(递归方法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数字方阵的旋转填充

void FillMatrix(int matrix[N][N],int size,int num,int offset)
{//matrix为总矩阵,size为剩余矩阵的大小,num为要填的第一个数,offset为剩余矩阵在总矩阵中的位置//递归终止条件if(size==0)return;//递归终止条件if(size==1){matrix[offset][offset]=num;return;}//先填充外围int i;for(i=0;i<size-1;i++){matrix[offset+i][offset]=num+i;matrix[offset+size-1][offset+i]=num+(size-1)+i;matrix[offset+size-1-i][offset+size-1]=num+2*(size-1)+i;matrix[offset][offset+size-1-i]=num+3*(size-1)+i;}//再递归填充内核(小了一圈的子矩阵)FillMatrix(matrix,size-2,num+4*(size-1),offset+1);
}

其原理如图所示一圈圈的填充,


测试代码:

int main()
{int Matrix[5][5];FillMatrix(Matrix,5,1,0);int i,j;for(i=0;i<5;i++){for(j=0;j<5;j++){cout<<setw(4)<<Matrix[i][j]<<" ";}cout<<endl;}return 0;
}

测试结果:



示例2

给定一个nxn(n<10)的方阵,请输出左上角开始逆时针从大到小填充方阵的结果。

输入方阵的大小n,输出方阵填充结果,每个数字均占两位并右对齐,以一个空格隔开。

#include<iostream>
#include<iomanip>
using namespace std;
const int N=10;
void FillMatrix(int matrix[N][N],int size,int num,int offset)
{//matrix为总矩阵,size为剩余矩阵的大小,num为要填的第一个数,offset为剩余矩阵在总矩阵中的位置//递归终止条件if(size==0)return;//递归终止条件if(size==1){matrix[offset][offset]=num;return;}//先填充外围int i;for(i=0;i<size-1;i++){matrix[offset+i][offset]=num-i;matrix[offset+size-1][offset+i]=num-(size-1)-i;matrix[offset+size-1-i][offset+size-1]=num-2*(size-1)-i;matrix[offset][offset+size-1-i]=num-3*(size-1)-i;}//再递归填充内核(小了一圈的子矩阵)FillMatrix(matrix,size-2,num-4*(size-1),offset+1);
}int main()
{int Matrix[N][N];int n;cin>>n;FillMatrix(Matrix,n,n*n,0);int i,j;for(i=0;i<n;i++){for(j=0;j<n;j++){cout<<setw(2)<<Matrix[i][j]<<" ";}cout<<endl;}return 0;
}

执行结果:


来自清华大学MOOC课件


这篇关于数字方阵的旋转填充(递归方法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1126699

相关文章

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI