根据你的问题描述编写C++代码如下:
#include <iostream>
#include <iomanip>
using namespace std;
#define MAXSIZE 20 //最大测试实例数-1(可根据需要修改,减一表示去掉n=0输入数据结束的情况)
//-------------------------------------
//函数声明
int setNum(int n,int **matrix2D);
int printNum(int n,int **matrix2D);
int main()
{
int index = 0;
int n[MAXSIZE] = {0};//用于存储测试实例n
int temp = 0;
cout<<"请输入测试实例n(0<n<=20):";
cin>>temp;
while(temp != 0)//如果输入0,则退出while循环
{
n[index] = temp;
index ++;
cout<<"请继续输入测试实例n(0<n<=20):";
cin>>temp;
}
if (index >= MAXSIZE)
{
cout<<"Sorry,已超出最大实例数"<<MAXSIZE-1<<endl;
return 0;
}
//------------------------------------
//循环处理每个测试实例
for (int x = 0;x<index;x++)
{
//------------------------------------
//动态创建二维数组
int **matrix2D = new int*[n[x]];
for (int r = 0; r < n[x]; r++)
{
matrix2D[r] = new int[n[x]];
}
setNum(n[x],matrix2D);
printNum(n[x],matrix2D);
if (x<index - 1)
{
cout<<endl;
}
//释放二维数组
for (r = 0; r < n[x]; r++)
{
delete matrix2D[r];
matrix2D[r] = NULL;
}
delete matrix2D;
matrix2D[r] = NULL;
}
return 0;
}
//---------------------------------------------
//二维数组计算赋值
int setNum(int n,int **matrix2D)
{
//定义二维数组上、下、左、右边界,并初始化
int up = 0,down = n -1,left = 0,right = n -1;
int number = 0,col;
while(1) //此循环实现顺时针螺旋顺序存入数据
{
//由左到右存入上边的一行数值
for (col = left ; col <= right ; col++)
{
matrix2D[up][col] = ++number;
}
//上边界+1
up++;
//判断数值是否完成,完成则退出while循环
if (number >= (n*n))
{
break;
}
//由上到下存入最右边的一列数值
for (col = up; col <= down ; col++)
{
matrix2D[col][right] = ++number;
}
//右边界-1
right--;
//由右到左存入最下边的一行数值
for (col = right ; col >= left ; col--)
{
matrix2D[down][col] = ++number;
}
//下边界-1
down--;
//判断数值是否完成,完成则退出while循环
if (number >= (n*n))
{
break;
}
//由下到上存入最左边的一列数值
for (col = down ; col >= up ; col--)
{
matrix2D[col][left] = ++number;
}
//左边界+1
left++;
}
return 0;
}
//---------------------------------------------
//打印二维数组
int printNum(int n,int **matrix2D)
{
for (int i = 0 ; i < n ; i++)
{
for(int j = 0 ; j < n; j++)
{
cout<<setw(3)<<setiosflags(ios::left)<<matrix2D[i][j];
if (j < n - 1)
{
cout<<" ";
}
}
cout<<endl;
}
return 0;
}
运行结果如下(其中n=0时输入数据结束):
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/78310a55b319ebc43aae25608b26cffc1f171670?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
望采纳!