题目描述
给你一个整数n,按要求输出n∗n的回型矩阵
输入描述:
输入一行,包含一个整数n 1<=n<=19
输出描述:
输出n行,每行包含n个正整数.
输入
4
输出
1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
解题思路
→ ↓ ← ↑ ………………
代码
#include <stdio.h>
void EE(int A[][100], int h, int l, int num, int x, int y); //声明函数
void SS(int A[][100], int h, int l, int num, int x, int y);
void WW(int A[][100], int h, int l, int num, int x, int y);
void NN(int A[][100], int h, int l, int num, int x, int y);
int main()
{
int A[100][100] = { 0 }, n;
scanf("%d", &n);
EE(A, n, n, 1, 0, 0); //数组,行数,列数,数组被赋成的值,每次开始的位置
for (int i = 0; i < n; i++)//打印数组
{
for (int v = 0; v < n; v++)
printf("%4d", A[i][v]);
printf("\n");
}
return 0;
}
void EE(int A[][100], int h, int l, int num, int x, int y) //向右
{
for (int i = 0; i < l; i++, y++) //i代表循环的次数
A[x][y] = num++; //num给对应位置赋值
if (--h != 0) //利用h,l判断是否停止运行
SS(A, h, l, num, ++x, --y); //进入下一个函数
}
void SS(int A[][100], int h, int l, int num, int x, int y) //向下
{
for (int i = 0; i < h; i++, x++)
A[x][y] = num++;
if (--l != 0)
WW(A, h, l, num, --x, --y);
}
void WW(int A[][100], int h, int l, int num, int x, int y) //向左
{
for (int i = 0; i < l; i++, y--)
A[x][y] = num++;
if (--h != 0)
NN(A, h, l, num, --x, ++y);
}
void NN(int A[][100], int h, int l, int num, int x, int y) //向上
{
for (int i = 0; i < h; i++, x--)
A[x][y] = num++;
if (--l != 0)
EE(A, h, l, num, ++x, ++y);
}