题目描述 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[][];
int main(){
int n;
cin>>n;
int i = n/;
int j = n/;
int m = n*n;
int cnt = ;
a[i][j] = cnt++;
int f = ;
int ff;
while(cnt<=m){
f+=;
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 = ;
for(int i = ; i < n; i++){
for(int j = ; j< n; j++){
cout<<a[i][j]<<" ";
if(i == j || i + j == n-){
sum+=a[i][j];
}
}
cout<<endl;
}
cout<<sum<<endl;
return ;
}