问题描述:对于任意一个大于等于4的整数n,可得到如下一个nxn的回形数字矩阵
1 1 1 1
1 2 2 1
1 2 2 1
1 1 1 1
每一圈的数字都一样,往内层走,数字变大。
输入:一个整数n
输出:一个nxn数字矩阵
求解方法:
思路一:这是一个对称形,上下对称,左右对称,所以,我们只需要找到四分之一的形状,其他的用对称性就可以得到。我们不妨把这个回形矩阵分成左上、右上、左下、右下四个部分。
左上部分实际上是取行数和列数的最小值,所以这个问题就变得简单了。
程序代码如下:
#include<iostream> using namespace std; int a[100][100]; int main(){ int n,m; cin>>n>>m; for(int i=1;i<=(n+1)/2;i++) for(int j=1;j<=(m+1)/2;j++) { a[i][j]=i<j?i:j; a[n+1-i][j]=a[i][j]; a[i][m+1-j]=a[i][j]; a[n+1-i][m+1-j]=a[i][j]; } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) cout<<a[i][j]<<' '; cout<<endl; } return 0; }