C++实现n维数组循环数列输出(改进版)

 

 

 输入:当前层左上角要填的数字Number,左上角的坐标begin,方阵的阶数为size

输出:数字旋转方阵

1.如果size=0,则算法结束

2.如果size=1,则data[begin][begin]=number

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

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

    4.1 data[i][j] = number,number++

    4.2 行下标 i++,列下表不变

5.重复下述的操作size-1次,填写黄色区域

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

    5.2 行下标 不变,列下表 j++

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

    6.1 data[i][j] = number,number++

    6.2 行下标 i--,列下表不变

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

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

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

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

#include <stdio.h>
#define SizeMax 100;
int data[100][100]={};
void Full(int number,int begin,int size)
	{   //从number开始写size方阵,左上角的下标为(begin,begin) 
		int i,j,k;
		//递归的边界条件,如果size=0,无需填写 
		if(size==0)
		return;	
		//如果size=1 
		if(size==1)
		{
			//此时的数值就等于初始的number值 
			data[begin][begin]=number;
			return;
		}
		
		//初始化左上角下标 
		i=begin;
		j=begin;
		 
		//填写A区域,共有size-1个数 
		for(k=0;k<size-1;k++)
		{
			//当前的位置数值为number 
			data[i][j]=number;
			//行下标向下移动的同时,number自增 
			number++;
			i++;
		}
		
		//填写B区域,共有size-1个数 
		for(k=0;k<size-1;k++)
		{
			//当前的位置数值为number
			data[i][j]=number;
			//列下标向右移动的同时,number自增
			number++;
			j++;
		}
		
		//填写C区域,共有size-1个数 
		for(k=0;k<size-1;k++)
		{
			//当前的位置数值为number
			data[i][j]=number;
			//行下标向上移动的同时,number自增
			number++;
			i--;
		}
		
		//填写D区域,共有size-1个数
		for(k=0;k<size-1;k++)
		{
			//当前的位置数值为number
			data[i][j]=number;
			//列下标向左移动的同时,number自增
			number++;
			j--;
		} 	
		//递归求解,左上角下标为begin-1 
		Full(number,begin+1,size-2);
    }
    
int main(){
	int number,begin,size;
	//number的初始值为 1
	number=1;
    printf("Please enter the size:");
    scanf("%d",&size); 
    //调用Full方法 
    Full(number,begin,size);
	for(int i=0;i<size;i++){
		for(int j=0;j<size;j++){
		printf("%4d",data[i][j]);
	    }printf("\n");
	}
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值