蛇形矩阵是一个n*n的矩阵,将整数1到n*n按照蛇形的顺序装入一个 n*n 的蛇形矩阵中,如样例所示分别为5阶和10阶蛇形矩阵。
输入格式:
只有一行,为一个整数n,代表蛇形矩阵的阶数,n的范围是1—100。
输出格式:
共n行,为蛇形矩阵。每行的每个元素用空格分隔,注意最后一个数的后面为换行符。
输入样例一:
5
输出样例一:
1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 24
15 16 22 23 25
输入样例二:
10
输出样例二:
1 3 4 10 11 21 22 36 37 55
2 5 9 12 20 23 35 38 54 56
6 8 13 19 24 34 39 53 57 72
7 14 18 25 33 40 52 58 71 73
15 17 26 32 41 51 59 70 74 85
16 27 31 42 50 60 69 75 84 86
28 30 43 49 61 68 76 83 87 94
29 44 48 62 67 77 82 88 93 95
45 47 63 66 78 81 89 92 96 99
46 64 65 79 80 90 91 97 98 100
代码实现:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[])
{
int n,i=1,j,k,r=0,c=0;
scanf("%d",&n);
int arr[n][n];
for(k=0;k<n;k++)
for(j=0;j<n;j++)
arr[k][j]=0;
arr[r][c]=i;
r=1;
i=2;
while(r<n&&c<n)
{
for(;r>=0;r--,c++,i++)
arr[r][c]=i;
if(c!=n)
r++;
else
break;
for(;c>=0;r++,c--,i++)
arr[r][c]=i;
c++;
}
if(c!=n)
{
r=n-1; c=1;
}
while(r<n&&c<=n)
{
for(;c<=n-1;r--,c++,i++)
arr[r][c]=i;
c--;
r+=2;
for(;r<=n-1;r++,c--,i++)
arr[r][c]=i;
c+=2;
r--;
}
for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
printf("%d ",arr[i][j]);
printf("%d\n",arr[i][j]);
}
return 0;
}
心得体会:最开始写的时候,没有意识到我的判断条件并不对n取奇取偶两种情况同时适用。 还好给的测试用例比较良心。