小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和.
输入描述 Input Descriptionn(即n行n列)
输出描述 Output Descriptionn+1行,n行为组成的矩阵,最后一行为对角线数字之和
样例输入 Sample Input3
样例输出 Sample Output5 4 36 1 27 8 925
模拟题 注意每次到了增加一圈时,用来判断是否到边界的数要增加2 参考链接 https://blog.csdn.net/zsc2014030403015/article/details/46961725 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
相关资源:JAVA上百实例源码以及开源项目