解题报告:输入一个奇数n,输出一个n行n列的蛇形矩阵。我的做法是先将所有的打表,然后直接输出,但是这样要求要非常准确定位,如果某个地方稍有差错,输出来就会是一个什么都不像的东西。下面是代码:
1 #include<cstdio> 2 #include<cstring> 3 int map[105][105]; 4 void dabiao() { 5 int d = 2; 6 int x = 50,y = 50; 7 map[x][y] = 1; 8 for(int i = 2;i<100;i+=2) { 9 y+=1; 10 map[x][y] = d++; 11 for(int j = 1;j<i;++j) { 12 x--; 13 map[x][y] = d++; 14 } 15 for(int j = 1;j<=i;++j) { 16 y--; 17 map[x][y] = d++; 18 } 19 for(int j = 1;j<=i;++j) { 20 x++; 21 map[x][y] = d++; 22 23 } 24 for(int j = 1;j<=i;++j) { 25 y++; 26 map[x][y] = d++; 27 } 28 } 29 } 30 31 32 int main() { 33 int n; 34 memset(map,0,sizeof(map)); 35 dabiao(); 36 while(scanf("%d",&n)!=EOF) { 37 int sum = 0; 38 for(int i = 50-n/2;i<=50+n/2;++i) 39 for(int j = 50-n/2;j<=50+n/2;++j) { 40 if(i == j || i+j ==100) 41 sum+=map[i][j]; 42 printf(j==50+n/2? "%d ":"%d ",map[i][j]); 43 } 44 printf("%d ",sum); 45 } 46 return 0; 47 }