本文主要是介绍1160 蛇形矩阵(模拟),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路:
从中间开始填充数字,填充的效果如下图:
对于不同的n,填充的层数为k=n/2
填充的顺序是右上左下
每一层填充的段数又为2*k(1<=k<=n/2)
求对角线就把住对角线和副对角线的和求出来再减去中间一个值因为被多算了一次。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define maxn 101
int a[maxn][maxn];
int main()
{//freopen("in.txt","r",stdin);int n;int tot=0;int x,y,i,r,k,sum;scanf("%d",&n);memset(a,0,sizeof(a));a[x=n/2][y=n/2]=1;tot=2;for(k=1;k<=n/2;k++){y++;for(r=1;r<=2*k;r++){a[x][y]=tot;tot++;x--;}x++;y--;for(r=1;r<=2*k;r++){a[x][y]=tot;tot++;y--;}y++;x++;for(r=1;r<=2*k;r++){a[x][y]=tot;tot++;x++;}x--;y++;for(r=1;r<=2*k;r++){a[x][y]=tot;tot++;y++;}y--;}for(x=0;x<n;x++){for(y=0;y<n;y++){if (y!=n-1){printf("%d ",a[x][y]); }else{printf("%d",a[x][y]); }}printf("\n");} sum=0;for (i = 0; i < n; ++i){sum+=a[i][i];}for (i = 0; i < n; ++i){sum+=a[i][n-i-1];}printf("%d\n",sum-a[(n-1)/2][(n-1)/2] ); return 0;
}
这篇关于1160 蛇形矩阵(模拟)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!