首页 > 代码库 > (水题)蛇形矩阵

(水题)蛇形矩阵

1160 蛇形矩阵

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 白银 Silver
 
 
题目描述 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

数学太渣没推出来。。只能模拟做的。还debug好久。。。

思路就是从二维数组里最后一个数往里面转,也可以反着来。。

代码:

 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #define e 1e-8 5 #include<cmath> 6 using namespace std; 7 int main() 8 { 9     int n;10     int a[100][100];11     memset(a,0,sizeof(a));12     scanf("%d",&n);13     int s=n*n,i=n-1,j=n-1;14     while(s>0)15     {16         while(j>=0&&!a[i][j])a[i][j--]=s--;17         j++;18         i--;19         while(i>=0&&!a[i][j])a[i--][j]=s--;20         i++;21         j++;22         while(j<n&&!a[i][j])a[i][j++]=s--;23         j--;24         i++;25         while(i<n&&!a[i][j])a[i++][j]=s--;26         i--;27         j--;28     }29     int k,l;30     for(k=0; k<n; k++)31     {32         for(l=0; l<n-1; l++)33             printf("%d ",a[k][l]);34         printf("%d\n",a[k][l]);35     }36     int ans=0;37     i=j=0;38     for(int x=0; x<n; x++)39         ans+=a[i++][j++];40     i=0;j=n-1;41     for(int y=0;y<n;y++)42         ans+=a[i++][j--];43         printf("%d\n",ans-a[n/2][n/2]);44     return 0;45 }
View Code

 

(水题)蛇形矩阵