蛇形矩阵(完全)

画 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;
 }

仅代表个人见解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值