《蛇形矩阵》题解
蛇形矩阵
http://www.nowcoder.com/questionTerminal/f228a074c5274619b26be544962375e1
首先分为2n-1次循环。每次循环会写入整个斜边的数字。斜边的方向有左下,右上。当循环次数k<=n时,当k为单数时,方向为右上,当k为双数时,方向为左下。当循环次数n<k<2*n-1时,当k为单数时,方向为右上,当k为双数时,方向为左下。
#include <stdio.h> int main() { int n; scanf("%d",&n); int a[n][n]; int i,k,j; int x=1; for(k=1;k<=2*n-1;k++) //总共有7个斜边 { if(k<=n) //前4个斜边 { if(k%2==0) //如果斜边是双数次 { for(i=0,j=k-1;j>=0;i++,j--) //初始位置是a[0][k-1],由于是向左下移动,j碰壁的时候循环结束 a[i][j]=x++; } else //如果斜边是单数次 { for(i=k-1,j=0;i>=0;j++,i--) //初始位置是a[k-1][0],由于是向右上移动,i碰壁的时候循环结束 a[i][j]=x++; } } else //后三个斜边 { if(k%2==0) { for(i=k-n,j=n-1;i<n;j--,i++) //初试位置a[k-n][n-1],由于向左下移动,i碰壁的时候停止循环 a[i][j]=x++; } else { for(i=n-1,j=k-n;j<n;i--,j++) //初始位置a[n-1][k-n],由于向右上移动,j碰壁的时候停止循环 a[i][j]=x++;} } } for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%d ",a[i][j]); printf("\n"); } }