题目描述 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
模拟题
注意每次到了增加一圈时,用来判断是否到边界的数要增加2
C++代码:
#include<iostream> #include<cstdio> using namespace std; int a[102][102]; int main(){ int n; cin>>n; int i = n/2; int j = n/2; int m = n*n; int cnt = 1; a[i][j] = cnt++; int f = 0; int ff; while(cnt<=m){ f+=2; j++; ff = f; while(ff--){ a[i][j] = cnt++; if(ff)i--; } ff = f; j--; while(ff--){ a[i][j] = cnt++; if(ff)j--; } ff = f; i++; while(ff--){ a[i][j] = cnt++; if(ff)i++; } ff = f; j++; while(ff--){ a[i][j] = cnt++; if(ff)j++; } } int sum = 0; for(int i = 0; i < n; i++){ for(int j = 0; j< n; j++){ cout<<a[i][j]<<" "; if(i == j || i + j == n-1){ sum+=a[i][j]; } } cout<<endl; } cout<<sum<<endl; return 0; }
来源:https://www.cnblogs.com/Weixu-Liu/p/10630263.html