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
数据范围及提示 Data Size & Hint
思路: 具体看代码注释,比较容易可以看出规律
#include<stdio.h>#include<string.h>int arr[101][101];int main(){ int n; scanf("%d",&n); int mid = (1+n)/2; int c = 1; arr[mid][mid]=c++; int i = mid,j = mid;//从中心开始执行 for(int k = 1;k<=n/2;k++){//这里表示执行几次循环圈 j++;//此处向右走一步,表示开始执行循环圈 arr[i][j] = c++; //向上 while(i!=mid-k||j!=mid+k){ i--; arr[i][j]=c++; } //向左 while(i!=mid-k||j!=mid-k){ j--; arr[i][j] = c++; } //向下 while(i!=mid+k||j!=mid-k){ i++; arr[i][j] = c++; } //向右 while(i!=mid+k||j!=mid+k){ j++; arr[i][j] = c++; } } for(int i = 1;i<=n;i++){ for(int j = 1;j<=n;j++){ if(j!=n)PRintf("%d ",arr[i][j]); else printf("%d",arr[i][j]); } printf("/n"); } int sum = 0; for(int i = 1;i<=n;i++) sum+=arr[i][i]; for(int i = 1;i<=n;i++) sum+=arr[i][n-i+1]; printf("%d/n",sum-arr[mid][mid]); return 0;}新闻热点
疑难解答