昨天做一个笔试题目,遇到了一个求解n阶蛇形矩阵问题,此问题解法在于将这个大的矩阵划分成由外到内不断缩小的一个圈。对于偶数,比如若输入n=7,即可先画出最外边也就是最大的那个圈,边长都是7的正方形,然后再画内部边长为5,紧接着边长为3,最后边长为1;对于奇数,比如输入n=6的话,先画出最外边边长是6,再画出边长是4,最后边长是2,最终结束;关键在于把重复性的工作提取出来,每次画圈从顶点出发向右、再向下、再向左,最后向上完成,把这一个过程的算法描述清楚就可以了,接下来就是循环重复性的操作
#include <iostream>
#include <malloc.h>
using namespace std;
int arr[100][100];
int startNum=1;
void DrawCircle(int len,int n);
int main(){
int i,j,k,n,len;
cout<<"请输入蛇形矩阵阶数n\nn=";
cin>>n;
len=n;
if(n%2!=0){
while(len>1){
DrawCircle(len,n);
len=len-2;
}
arr[n/2+1][n/2+1]=n*n;
}
else{
while(len>1){
DrawCircle(len,n);
len=len-2;
}
}
cout<<"对应的蛇形矩阵如下"<<endl;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
cout<<a