【C++小白成長擼】--N階幻方(魔陣)矩陣


解決方法:1.第一個元素放在第一行中間一列

     2.下一個元素存放在當前元素的上一行、下一列。

     3.如果上一行、下一列已經有內容,則下一個元素的存放位置為當前列的下一行。

在找上一行、下一行或者下一列的時候,必須把這個矩陣看成是回繞的。

 

代碼中,為了判斷,當前位置是否有元素,我引入與魔方矩陣規模相同的另一個矩陣,如果魔方矩陣一個位置不為空,相應另一個矩陣那個位置為1,否則為0.

 

 1 /*程序的版權和版本聲明部分:
 2 **Copyright(c) 2016,電子科技大學本科生
 3 **All rights reserved.
 4 **文件名:N階魔方矩陣
 5 **程序作用:N階魔方矩陣
 6 **作者:Amoshen
 7 **完成日期:2016.10.27
 8 **版本號:V1.0
 9 */
10 #include <iostream>
11 
12 using namespace std;
13 
14 #define MAX_SIZE 100
15 
16 int main(void)
17 {
18     int ROW,CIE,i,j,N,ROW1,CIE1;
19     int MAGIC[MAX_SIZE][MAX_SIZE] = {0};
20     int b[MAX_SIZE][MAX_SIZE] = {0};
21 
22     cout <<"N階中N只能是奇數!! warning" <<endl;
23     cout << "輸入魔陣階數N:";
24     cin >> N;
25     //實現魔陣的填充
26 
27     ROW = 0;
28     CIE = (N - 1)/2;
29 
30     MAGIC[ROW][CIE] = 1;
31     b[ROW][CIE] = 1;
32 
33     for(i = 2;i <= (N*N);i++)//
34     {
35         ROW1 = ROW - 1;
36         CIE1 = CIE + 1;
37 
38         if(ROW1 < 0)
39         {
40             ROW1 = N - 1;
41         }
42         if(CIE1 > (N - 1))
43         {
44             CIE1 = 0;
45         }
46 
47         if(b[ROW1][CIE1] == 0)
48         {
49             ROW = ROW1;
50             CIE = CIE1;
51             MAGIC[ROW][CIE] = i;
52             b[ROW][CIE] = 1;
53         }
54         else
55         {
56             ROW = ROW + 1;
57             if(ROW == N)
58             {
59                 ROW = 0;
60             }
61             MAGIC[ROW][CIE] = i;
62             b[ROW][CIE] = 1;
63         }
64     }
65 
66     cout << "N階魔陣的輸出實現:" <<endl;
67     //N階魔陣的輸出實現
68     for(i = 0;i < N;i++)
69     {
70         for(j = 0;j < N;j++)
71         {
72             cout << MAGIC[i][j] << '\t';
73         }
74         cout << endl;
75     }
76 
77     return 0;
78 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM