求解 用 C++ 解 怎么解啊

二、编程题(需给出源代码和程序运行截图)
1. 设计程序实现n*n魔方矩阵(n为奇数)的输出。
n*n魔方矩阵就是指每一行、每一列以及两个对角线上的n个自然数的和都相等的方阵。如3*3魔方矩阵为:
8 1 6
3 5 7
4 9 2
矩阵内填写的数值为1~n*n的自然数。使用已学过的数组相关知识编写程序实现任意n*n魔方矩阵(n为奇数)的构造并显示出最终矩阵的结果。
输入输出要求:
(1) n的值由用户指定
(2) 输出时按照矩阵的形式输出结果。
 输入输出示例
Please input an odd positive integer:3
Find 3*3 magic matrix
――――――――
8 1 6
3 5 7
4 9 2
――――――――

  1. 设计Set(集合)类,Set可以包含零个或多个无序的非重复元素,元素都是int型。公共接口除包含构造函数、拷贝构造函数、析构函数外,还包含以下成员函数:创建一个Set,增加一个新元素到Set,从Set中删除一个元素,显示Set中元素,计算Set中元素个数等 。为Set类重载+(并集)、-(差集)、*(交集)。完成后,编写相应程序测试你的设计

#include
#include
#include

#define MAXSIZE 99

using namespace std;

int main()
{
int n = 0, m = 1;
cout<<"\nPlease input an odd positive integer:";
cin>>n;

int zero[MAXSIZE*99] = {0};

vector<int> data(zero, zero + n * n * sizeof(int));

int i = 0, j = ( n - 1 ) / 2;
    data[j] = 1;
while( m < n * n )
{
    i = i  + n - 1;
    j = j  + n + 1;

    if (data[ ( i % n ) * n + ( j % n ) ] == 0 )
    {
        m++;
        data[ ( i % n ) * n + ( j % n ) ] = m;

    }else{
        i = i + 3;
        j = j - 2;
    }
}

cout<<endl<<"Find "<<n<<" * "<<n<<" magic matrix"<<endl;
for (i = 0; i < n ; i++)
{
    cout<<"_____";
}
    cout<<endl<<endl;
for( i = 0; i < n; i++)
{
    for ( j = 0; j < n; j++)
    {
        printf("%4d ",data[ n * i + j]);
    }
    cout<<endl<<endl;
}

for (i = 0; i < n ; i++)
{
    cout<<"_____";
}
cout<<endl<<endl;

}

图片说明
图片说明