数字旋转方阵

💬推荐一款模拟面试、刷题神器,从基础到大厂面试题👉点击跳转刷题网站进行注册学习


一、问题及想法

[问题] 输出如图4. 3(a)所示NXN(1≤N≤10)的数字旋转方阵。

[想法] 用二维数组 data[N][N]表示NXN的方阵,观察方阵中数字的规律,可以从外层向里层填数,如下图所示。在填数过程中,每一层的起始位置很重要。设变量size表示方阵的大小,则初始时size=N,填完一层则size=size- 2;设变量begin表示每一层的起始位置,变量i和j分别表示行号和列号,则每一层初始时i= begin,j= begin.将每一层的填数过程分为A、B、C和D四个区域,则每个区域需要填写size-1个数字,填写区域A时列号不变行号加1,填写区域B时行号不变列号加1,填写区域C时列号不变行号减1,填写区域D时行号不变列号减1。显然,递归的结束条件是size等于0或size等于1。
在这里插入图片描述
在这里插入图片描述

二、算法

数字旋转方阵Full

输入:当前层左上角要填的数字number,左上角的坐标begin,方阵的阶数size
输出:数字旋转方阵

1.如果size等于0,则算法结束;

2.如果size等于1,则data[begin][begin]= number,算法结束;

3.初始化行、列下标i= begin, j= begin;

4.重复下述操作size-1次,填写区域A

4.1 data[i]GJ = number; number+t;

4.2 行下标i++;列下标不变;
5.重复下述操作size- 1次,填写区域B

5.1 data[i][j]= number; number++;

5.2行下标不变;列下标j++;

6.重复下述操作size-1次,填写区域C

6.1 data[i][i]= number; number++;

6.2 行下标i- -;列下标不变;

7.重复下述操作size-1 次,填写区域 D

7.1 data[i][j]= number; number++;

7.2 行下标不变,列下标j- -;

8.调用函数Full在size- 2阶方阵中左上角begin+1处从数字number开始填数:

三.代码实现

void show (int arr[6][6],int number,int size,int begain) {       //数字方阵 
	if(size==1) {
		arr[begain][begain]=number+1;
		return ;
	}
	if(size==0) {
		return ;
	}
	int i=begain,j=begain;
	for (int k=0; k<size-1; k++) {
		arr[i][j]=number;
		number++;
		i++;
	}
	for (int k=0; k<size-1; k++) {
		arr[i][j]=number;
		number++;
		j++;
	}
	for (int k=0; k<size-1; k++) {
		arr[i][j]=number;
		number++;
		i--;
	}
	for (int k=0; k<size-1; k++) {
		arr[i][j]=number;
		number++;
		j--;
	}
	show(arr,number,size-2,begain+1);
}
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值