魔法矩阵c++实现(nil)

来源:互联网 发布:华育杯好作文网络征集 编辑:程序博客网 时间:2024/06/07 06:11

#include <cstdlib>#include <iostream>using namespace std;int main(int argc, char *argv[]){       while(1){        int iOdd = -1;        int i,j,iOddSquare,**piArr;        int iRow = 0,iColumn,iRowTemp,iColumnTemp;        int *iCheckSum;        for(;;){                cout<<"Enter Odd number:";                cin>>iOdd;                if((iOdd > 0)&& ((iOdd % 2) == 1))/*判断数值有效且是奇数*/                         break;                else                    cout<<"Enter error,Please again"<<endl;        }                        iOddSquare = iOdd*iOdd;        iColumn = (iOdd -1 )/2;        /**********************分配内存***************************/        iCheckSum = new int[iOdd+2];//用于叫校验        if(NULL == iCheckSum){                cout<<"new fail"<<endl;                exit(-1);                }         for(i = 0;i<iOdd+2;++i)              iCheckSum[i] = 0;        /*********************分配内存*****************************/        piArr = new int *[iOdd];/*分配指向数组的指针内存*/        if(NULL==piArr){                    cout<<"new fail"<<endl;                    exit(-1);        }                for(i = 0; i < iOdd;++i){              piArr[i] = new int[iOdd];//数组分配内存              if(NULL == piArr[i]){//分配失败释放内存空间                       for(j = i;j>=0;--j){                            delete [] piArr[j];                            piArr[j] = NULL;                             if(0==j){                                     delete [] piArr;                                     piArr = NULL;                                     cout<<"new fail"<<endl;                                     exit(-1);                            }                      }              }        }        /*********************生成魔方矩阵******************************/                for(i = 0;i<iOdd;i++)              for(j = 0;j < iOdd;j++)                    piArr[i][j] = 0;        piArr[0][iColumn] = 1;        for(i = 2; i<= iOddSquare;++i){                    iRowTemp = iRow;                    iColumnTemp = iColumn;                    if(iRow-1>=0)                        iRow--;                    else                        iRow = iRow-1+iOdd;                                            if(iColumn + 1<= iOdd - 1)                        iColumn++;                    else                        iColumn = iColumn+1-iOdd;                    if(piArr[iRow][iColumn]>0){                         iRow = iRowTemp+1;                         iColumn = iColumnTemp;                    }                    piArr[iRow][iColumn] = i;          }                /************************打印出矩阵******************************/        for(i = 0;i < iOdd ;++i){              for(j = 0; j < iOdd;++j)                    cout<<"  "<<piArr[i][j];              cout<<"\n";        }        /***********************计算校验********************************/        for(i = 0;i < iOdd;++i){              for(j = 0;j < iOdd;++j)                    iCheckSum[i]+=piArr[i][j];              iCheckSum[iOdd]+=piArr[i][i];//计算对角值 '\'              iCheckSum[iOdd+1]+=piArr[i][iOdd-1-i];//计算对角值 '/'                       }        for(i = 0; i < iOdd+2;++i)               if(iCheckSum[i] == (iOdd*(iOdd*iOdd+1)/2))                    continue;               else{                    cout<<"check sum error!"<<endl;                }         cout<<"check sum success!"<<endl;        /*******************************************************/        //释放内存         for(i = 0;i<iOdd;i++){              delete [] piArr[i];              piArr[i] =NULL;        }        delete [] piArr;        piArr = NULL;        delete [] iCheckSum;    }        /*************************************************************/         return 0;}


0 0