您的位置:首页 > 其它

蛇形矩阵

2016-03-12 14:31 197 查看
题目描述 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 <iostream>

#include<algorithm>

#include<cstdio>

#include<cmath>

#include<cstring>

#include<cstdlib>

#include<stack>

#include<queue>

using namespace std;

stack <char> s;

int main()

{

int a[101][101];

int i, j, s = 0, n;

scanf("%d", &n);

int flag = n * n;

memset(a, 0, sizeof(a));

i = n;

j = n + 1;

while (flag > 0)\\顺序是固定的

{

while(a[i][j - 1] == 0 && j > 1)\\因为有==0的条件,所以已经包含了所有情况,不含有覆盖情况

a[i][--j] = flag--;

while (a[i - 1][j] == 0 && i > 1)

a[--i][j] = flag--;

while (a[i][j + 1] == 0 && j < n)

a[i][++j] = flag--;

while (a[i + 1][j] == 0 && i < n)

a[++i][j] = flag--;

}

for (i = 1; i <= n; i++)

{

for (j = 1; j <= n; j++)

{

if (i == j || i + j == n + 1)

s += a[i][j];

}

}

for (i = 1; i <= n; i++)

{

for (j = 1; j <= n; j++)

{

printf("%d ", a[i][j]);

}

printf("\n");

}

printf("%d", s);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: