算法设计经典练习一
回型矩阵
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;
}
代码仅供参考,让我们共同学习!