1160 蛇形矩阵

题目描述 Description

小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和.

输入描述 Input Description

n(即n行n列)

输出描述 Output Description

n+1行,n行为组成的矩阵,最后一行为对角线数字之和

样例输入 Sample Input

3

样例输出 Sample Output

5 4 3
6 1 2
7 8 9
25
#include
int map[100][100];
int main()
{
  int way[4][2]={{0,1},{-1,0},{0,-1},{1,0}};
  int n;
  scanf("%d",&n);
  int x,y,n_way=0,i=1,j,sum=0;
  int k1=0,k2=1,k3=0;
  x=n/2,y=n/2;
  while(x+y!=2*(n-1)){
    map[x][y]=i;
    if(x==y||(x+y)==n-1)
    sum+=i;
    i++;
    x+=way[n_way][0];
    y+=way[n_way][1];
    k1++;
    if(k1==k2){
      k1=0;
      k3++;
      n_way++;
      n_way%=4;
    }
    if(k3==2){
      k2++;
      k3=0;
    }
  }
  map[x][y]=i;
  sum+=i;
  for(i=0;i

参考代码

#include 
#include 
#define maxn 20
int a[maxn][maxn];
int main(int argc, const char * argv[]) {
    int n, x, y, tot = 0;
    scanf("%d",&n);
    memset(a, 0, sizeof(a));
    tot = a[x=0][y=n-1]=1;
    while (tot=0 && !a[x][y-1]) a[x][--y]=++tot;
        while(x-1>=0 && !a[x-1][y]) a[--x][y]=++tot;
        while(y+1

你可能感兴趣的:(1160 蛇形矩阵)