1.题目
给你一个整数n,按要求输出n∗n的回型矩阵。
2.分析
可以看出这个图像是从左上到右上,右上到右下,右下到左下,左下到坐上,然后向内循环,类似一个方形的蜗牛状。
3.代码分解
while (l < r)
{
//左->右
for (i = l; i <=r; i++)
{
arr[l][i] = a;
a++;
}
//上->下
for (i = l+1; i <=r; i++)
{
arr[i][r] = a;
a++;
}
//右->左
for (i = r-1; i >= l; i--)
{
arr[r][i] = a;
a++;
}
//下->上
for (i = r - 1; i > l; i--)
{
arr[i][l] = a;
a++;
}
l++;
r--;
}
我这里是l为左边,r为右端分别表示,再用while循环控制。走完第一层就在向里面走所以l++,r--;值得注意的是我们这个代码如果就写到这里的话我们的n取奇数的时候中间的数会成随机值,所以我们要在最后加一个条件
if (n % 2 != 0)
{
arr[l][l] = a;
}
最后打印即可。
4.完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int n = 0, i = 0;
scanf("%d", &n);
int arr[50][50] = { 0 };
int a = 1, l = 0, r = n - 1;
while (l < r)
{
//左->右
for (i = l; i <=r; i++)
{
arr[l][i] = a;
a++;
}
//上->下
for (i = l+1; i <=r; i++)
{
arr[i][r] = a;
a++;
}
//右->左
for (i = r-1; i >= l; i--)
{
arr[r][i] = a;
a++;
}
//下->上
for (i = r - 1; i > l; i--)
{
arr[i][l] = a;
a++;
}
l++;
r--;
}
if (n % 2 != 0)
{
arr[l][l] = a;
}
for (i = 0; i < n; i++)
{
int j = 0;
for (j = 0; j < n; j++)
{
printf("%-2d ", arr[i][j]);
}
printf("\n");
}
return 0;
}