首页 > 代码库 > (水题)蛇形矩阵
(水题)蛇形矩阵
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 }
(水题)蛇形矩阵
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。