【C++小白成長擼】--(續)單偶數N階魔方矩陣

來源:互聯網
上載者:User

標籤:++   演算法   技術分享   偶數   pre   img   開始   cout   效果   


1 /*程式的著作權和版本聲明部分: 2 **Copyright(c) 2016,電子科技大學本科生 3 **All rights reserved. 4 **檔案名稱:單偶數N階魔方矩陣 5 **程式作用:單偶數N階魔方矩陣 6 **Amoshen 7 **完成日期:2016.11.2 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 m,u,n,ROW,CIE,ROW1,CIE1,i,j;//ROW為行,CIE為列,ROW1為臨時行變數,CIE1為臨時列變數,i,j分別表示行變數和列變數 19 int MAGIC[MAX_SIZE][MAX_SIZE] = {0},b[MAX_SIZE][MAX_SIZE] = {0},EX[MAX_SIZE][MAX_SIZE] = {0}; 20 21 cout << "請輸入m,注意:n = 2*(2 * m + 1),即m輸入1,得到一個6階魔方矩陣"<<endl; 22 cout << "m = "; 23 cin >> m; 24 25 n = 2*(2 * m + 1); 26 u = n/2; 27 //先填充第一個u*u魔陣 28 ROW = 0; 29 CIE = (u - 1)/2; 30 31 MAGIC[ROW][CIE] = 1; 32 b[ROW][CIE] = 1; 33 34 for(i = 2;i <= (u*u);i++) 35 { 36 ROW1 = ROW - 1; 37 CIE1 = CIE + 1; 38 39 if(ROW1 < 0) 40 { 41 ROW1 = u - 1; 42 } 43 if(CIE1 > (u - 1)) 44 { 45 CIE1 = 0; 46 } 47 48 if(b[ROW1][CIE1] == 0) 49 { 50 ROW = ROW1; 51 CIE = CIE1; 52 MAGIC[ROW][CIE] = i; 53 b[ROW][CIE] = 1; 54 } 55 else 56 { 57 ROW = ROW + 1; 58 if(ROW == u) 59 { 60 ROW = 0; 61 } 62 MAGIC[ROW][CIE] = i; 63 b[ROW][CIE] = 1; 64 } 65 } 66 //再填充第四個魔陣(右下角) 67 for(i = u;i < 2*u;i++) 68 { 69 for(j = u;j < 2*u;j++) 70 { 71 MAGIC[i][j] = MAGIC[i-u][j-u] + u*u; 72 } 73 } 74 //右上方 75 for(i = 0;i < u;i++) 76 { 77 for(j = u;j < 2*u;j++) 78 { 79 MAGIC[i][j] = MAGIC[i+u][j] + u*u; 80 } 81 } 82 //左下角 83 for(i = u;i < 2*u;i++) 84 { 85 for(j = 0;j < u;j++) 86 { 87 MAGIC[i][j] = MAGIC[i-u][j+u] + u*u; 88 } 89 } 90 //右上方與右下角的交換 91 for(i = 0;i < u;i++) 92 { 93 for(j = 2*u-1;j > (2*u-m);j--) 94 { 95 EX[i][j] = MAGIC[i][j]; 96 MAGIC[i][j] = MAGIC[i+u][j]; 97 } 98 } 99 for(i = 0;i < u;i++)100 {101 for(j = 2*u-1;j > (2*u-m);j--)102 {103 MAGIC[i+u][j] = EX[i][j];104 }105 }106 //左上方與左下角的交換107 for(i = 0;i < u;i++)108 {109 if(i == (u-1)/2)110 {111 for(j = 1;j <= m;j++)112 {113 EX[i][j] = MAGIC[i][j];114 MAGIC[i][j] = MAGIC[i+u][j];115 }116 }117 else118 {119 for(j = 0;j < m;j++)120 {121 EX[i][j] = MAGIC[i][j];122 MAGIC[i][j] = MAGIC[i+u][j];123 }124 }125 }126 for(i = 0;i < u;i++)127 {128 if(i == (u-1)/2)129 {130 for(j = 1;j <= m;j++)131 {132 MAGIC[i+u][j] = EX[i][j];133 }134 }135 else136 {137 for(j = 0;j < m;j++)138 {139 MAGIC[i+u][j] = EX[i][j];140 }141 }142 }143 144 cout << n << "階魔方矩陣:" <<endl;145 146 for(i = 0;i < 2*u;i++)147 {148 for(j = 0;j < 2*u;j++)149 {150 cout << MAGIC[i][j] <<‘\t‘;151 }152 cout <<endl;153 }154 155 return 0;156 }

原理

因為是單偶數n = 2*(2*m + 1),如果把整個魔方矩陣均分為4份,每份都是奇數階,利用奇數階的演算法來填充。

()

完成後的

把最右邊m-1列中B與C對應相交換

A的中間一行,從第二列開始,m格與對應D交換,其餘從最左邊開始m格與D對應交換

交換後的最終

 

【C++小白成長擼】--(續)單偶數N階魔方矩陣

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.