编程实现n阶奇数幻方


奇幻七绝
  先填上行正中央,
  依次斜填切莫忘。
  上格没有顶格填,
  顶格没有底格放。

转载于:http://blog.csdn.net/fengchaokobe/article/details/7437767

编程实现奇数阶幻方算法:

[cpp]   view plain copy
    1. #include<iostream>  
    2. #include<iomanip>  
    3. #include<cmath>  
    4. using namespace std;  
    5. int main()  
    6. {  
    7.     int n;  
    8.     do   
    9.     {  
    10.         cout << "Please input a odd num:" << endl;  
    11.         cin>>n;  
    12.     } while (!(n%2));  
    13.       
    14.     int i;  
    15.     int **Matr=new int*[n];//动态分配二维数组  
    16.     for(i=0; i<n; ++i)  
    17.         Matr[i]=new int[n];//动态分配二维数组  
    18.     //j=n/2代表首行中间数作为起点,即1所在位置  
    19.     int j=n/2, num=1;//初始值  
    20.     i=0;  
    21.     while(num!=n*n+1)  
    22.     {  
    23.         int ii = (i%n+n)%n;//注意i%n可能为负数  
    24.         int jj = (j%n+n)%n;  
    25.         //往右上角延升,若超出则用%转移到左下角  
    26.         Matr[ii][jj]=num;  
    27.         //斜行的长度和n是相等的,超出则转至下一斜行  
    28.         if(num%n==0)//以n个数一组斜对角填,填满了则又从最后一个数的正下方开始填  
    29.             i++;  
    30.         else  
    31.         {  
    32.             i--;  
    33.             j++;  
    34.         }  
    35.         num++;  
    36.     }  
    37.     for(i=0;i<n;i++)  
    38.     {  
    39.         for(j=0;j<n;++j)  
    40.             cout<<setw((int)log10((double)n*n)+4)<<Matr[i][j];//格式控制  
    41.         cout<<endl<<endl;//格式控制  
    42.     }  
    43.     for(i=0;i<n;++i)  
    44.         delete []Matr[i];  
    45.     return 1;  
    46. }  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM