画 n阶蛇形方阵
比如如图是5阶方阵(5条对角线)
1 2 6 7 15
3 5 8 14 16
4 9 13 17 22
10 12 18 21 23
11 19 20 24 25
解题思路:
1.分为上三角和下三角,上三角的思路是同蛇形矩阵(不完全)
注意应该判断前面对角线个数的奇偶性来确定是前面对角线之和加行还是列;奇加行,偶加列;
2.至于下三角则需要用到对称的思想:
首先易推知a[i][j]的对称式为a[n+1-i][n+1-j],如5阶矩阵中a[2][5]对称式a[4][1],
其次根据对称的两对数之和等于n*n+1,
就可以利用已知的上三角来求下三角了;具体见代码;
具体代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
int x,y,i,j,k,sum,n;
int a[105][105];
x=y=1;
memset(a,0,sizeof(a));
scanf("%d",&n);
for (i=1;i<=n;i++)
for (j=1;j<=n+1-i;j++)
{
k=i+j-2;
sum=(k+1)*k/2;
if (k%2)//如果前面的对角线个数是奇数
a[i][j]=sum+i;
else
a[i][j]=sum+j;
}
for (i=1;i<=n;i++)
for (j=n-i+2;j<=n;j++)
a[i][j]=n*n+1-a[n+1-i][n+1-j];
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}
仅代表个人见解!