33.建立一个类 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; }