首页 > 代码库 > codevs 1160 蛇形矩阵x
codevs 1160 蛇形矩阵x
题目描述 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
数据范围及提示 Data Size & Hint
分类标签 Tags 点此展开
一定要注意 :这道题一开始走的方向是 fx=1 ;
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 6 using namespace std; 7 8 int n,lastnum,sum,num=1; 9 int jz[101][101];10 int fx;//代表此时走的方向 11 12 void con(int nx,int ny)13 {14 fx=1;15 memset(jz,0,sizeof(jz));16 jz[nx][ny]=1;17 while(num<lastnum)18 {19 if(fx==0)//向右走 20 {21 nx++;22 jz[nx][ny]=++num;23 if(jz[nx][ny+1]==0)24 {25 fx=1;//转变为向上走 26 }27 }28 else if(fx==1)//向上走29 {30 ny++;31 jz[nx][ny]=++num;32 if(jz[nx-1][ny]==0)33 {34 fx=2;//转变为向左走 35 }36 }37 else if(fx==2)//向左走38 {39 nx--;40 jz[nx][ny]=++num;41 if(jz[nx][ny-1]==0)42 {43 fx=3;//转变为向下走 44 }45 }46 else if(fx==3)//向下走47 {48 ny--;49 jz[nx][ny]=++num;50 if(jz[nx+1][ny]==0)51 {52 fx=0;//转变为向右走 53 }54 }55 }56 }57 58 int main()59 {60 scanf("%d",&n);61 lastnum=n*n;62 int firstx=(n+1)/2;//因为n一定为奇数 63 int firsty=firstx;64 con(firstx,firsty);65 for(int i=1;i<=n;i++)66 {67 for(int j=1;j<=n;j++)68 {69 cout<<jz[i][j]<<" ";70 }71 cout<<endl;72 }73 for(int i=1;i<=n;i++)74 {75 for(int j=1;j<=n;j++)76 {77 if(i==j) sum+=jz[i][j];//位于对角线上点 点的特征78 if(i+j==n) sum+=jz[i][j];79 }80 }81 cout<<sum;82 return 0;83 }
codevs 1160 蛇形矩阵x
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。