33.建立一个类 PHALANX,生成并显示一个折叠方阵。折叠方阵如下图所示。折叠方阵的生成过程为:起始数置于方阵的左上角,然后从起始数开始递增,依次折叠构成方阵。
具体要求如下:
- 私有数据成员
- int (*p)[20]:指向按照折叠规律存放方阵的二维整型数组。
- int startnum:折叠方阵的起始数。
- int n:存放方针的层数。
- 公有成员函数
- PHALANX (int s, int m ):构造函数,初始化成员数据。
- void process():生成起始数为 startnum 的 n 行方阵。
- void print():输出折叠方阵。
- ~ PHALANX( ):析构函数。
- 在主程序中对该类进行测试。
#include<iostream>
#include<iomanip>
using namespace std;
class PHALANX{
int (*p)[20],startnum,n;
public:
PHALANX(int s,int m):startnum(s),n(m){
p = new int[m][20];
}
void process(){
for(int i=0;i<n;i++){
int k=i*i+startnum;
for(int j=0;j<=i;j++){
p[j][i]=k++;
}
for(int j=i-1;j>=0;j--){
p[i][j]=k++;
}
}
}
//11.28-1
/*
void process(){
for(int i=0;i<n;i++){
for(int j=0;j<i+1;j++){
p[j][i]=i*i+startnum+j;
}
for(int k=0;k<i;k++){
p[i][k]=(i+1)*(i+1)+startnum-1-k;
}
}
}
*/
//11.28-2
/*
void process(){
int index=startnum;
for(int i=0;i<n;i++){
for(int j=0;j<i+1;j++){
p[j][i]=index++;
}
for(int k=0;k<i;k++){
p[i][i-k-1]=index++;
}
}
}
*/
/*
void process(){
int k = startnum;
for(int i=0;i<n;i++){
int j;
for(j=0;j<=i;j++){
p[j][i]=k++;
}
for(j=i-1;j>=0;j--){
p[i][j]=k++;
}
}
}
*/
void print(){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<setw(4)<<p[i][j]<<" ";
}
cout<<endl;
}
}
~PHALANX(){
if(p)delete[]p;
}
};
int main(){
PHALANX p(5,4);
p.process();
p.print();
return 0;
}