編程實現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