算法设计经典练习一 ——回型矩阵

算法设计经典练习一

回型矩阵

1    2    3    4    5    6     7
24   25   26   27   28   29    8
23   40   41   42   43   30    9
22   39   48   49   44   31    10
21   38   47   46   45   32    11
20   37   36   35   34   33    12
19   18   17   16   15   14    13  

如图所示为7*7回型矩阵,打印了4圈,因为4X4矩阵打印2圈,5X5矩阵打印3圈,6X6矩阵打印3圈,由此推断出打印圈数c=(N+1)/2.

代码如下:

#include<stdio.h>
#define N 7
void DisplayArr(int arr[][N])
{
	int i = 0;
	int j = 0;
	for (i = 0; i < N; i++)
	{
		for (j = 0; j <= N; j++)
		{
			printf("%2d ", arr[i][j]);
		}

		printf("\n");
	}
}
int main()
{
	int arr[N][N] = { 0 }; //初始化二维数组
	int c = (N+1)/2;
	int i = 0, j = 0;//数组的行和列 
	int num = 1; // 循环数从1开始
	//int k = 0;
	//循环结束的条件是下一步非空
	while  (num<=N*N)
	{
		//向右打印
		while (j < N &&arr[i][j]==0)
		{
			arr[i][j++] = num++;
		
		}
		
		j--;
		i++;
		while (i < N &&arr[i][j] == 0)
		{
			arr[i][j] = num++;
			i++;
		}

		i--;
		j--;
		//向左打印
		while (j >= 0 && arr[i][j] == 0)
		{
			arr[i][j] = num++;
			j--;
		
		
		}
		i--;
		j++;
		//向上打印
		while (i >= 0 && arr[i][j] == 0)
		{
			arr[i][j] = num++;
			i--;
		}
		i++;
		j++;

		//下一步向左打印的位置 
	
	}
	DisplayArr(arr);
	//system("pause");
	return 0;
}

代码仅供参考,让我们共同学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值