1160 蛇形矩阵(codevs)

http://codevs.cn/problem/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<cstdio>
#include<iostream>
using namespace std;
int ans[102][102];
int main()
{
    int n,x,y,sum=0;
    cin>>n;
    x=y=(n+1)/2;
    ans[x][y]=1;
    for (int i=2;i<=n;i++)
      {
          int a,b;
          if (i%2==0) b=y+1;
        else b=y-1;
          ans[x][b]=ans[x][y]+1;
          y=b;
          for (int j=1;j<i;j++)
            {
                if (i%2==0)
                  a=x-j;
                else a=x+j;
                ans[a][y]=ans[x][y]+j;
            }
            x=a;
          for (int j=1;j<i;j++)
            {
                 if (i%2==0)
                    b=y-j;
                 else b=y+j;
                 ans[x][b]=ans[x][y]+j;
            }
          y=b;
      }
    for (int i=1;i<=n;i++)
     {
      for (int j=1;j<=n;j++)
        cout<<ans[i][j]<<' ';
      cout<<endl;
     }
    for (int i=1;i<=n;i++)
      sum+=(ans[i][i]+ans[i][n+1-i]);
    sum-=1;
    cout<<sum;
    return 0;
}

慢慢枚举就好了。

posted @ 2016-02-15 09:06  外婆桥  阅读(429)  评论(0编辑  收藏  举报