魔方阵C语言设计方法及设计理念.docx_第1页
魔方阵C语言设计方法及设计理念.docx_第2页
魔方阵C语言设计方法及设计理念.docx_第3页
魔方阵C语言设计方法及设计理念.docx_第4页
魔方阵C语言设计方法及设计理念.docx_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Algorithm Gossip: 4N 魔方陣說明與 奇數魔術方陣 相同,在於求各行、各列與各對角線的和相等,而這次方陣的維度是4的倍數。解法先來看看4X4方陣的解法: 簡單的說,就是一個從左上由1依序開始填,但遇對角線不填,另一個由左上由16開始填,但只填在對角線,再將兩個合起來就是解答了;如果N大於2,則以 4X4為單位畫對角線: 至於對角線的位置該如何判斷,有兩個公式,有興趣的可以畫圖印證看看,如下所示:if(i%4=j%4|(i%4+j%4=3)/zai duijiao xian shang實作 C #include #include #define N 8 int main(void) int i, j; int squareN+1N+1 = 0; for(j = 1; j = N; j+) for(i = 1; i = N; i+) if(j % 4 = i % 4 | (j % 4 + i % 4) = 1) squareij = (N+1-i) * N -j + 1; else squareij = (i - 1) * N + j; for(i = 1; i = N; i+) for(j = 1; j = N; j+) printf(- , squareij); printf(n); return 0; 2、Algorithm Gossip: 2(2N+1) 魔方陣說明方陣的維度整體來看是偶數,但是其實是一個奇數乘以一個偶數,例如6X6,其中6=2X3,我們也稱這種方陣與單偶數方陣。解法如果您會解奇數魔術方陣,要解這種方陣也就不難理解,首先我們令n=2(2m+1),並將整個方陣看作是數個奇數方陣的組合,如下所示: 首先依序將A、B、C、D四個位置,依奇數方陣的規則填入數字,填完之後,方陣中各行的和就相同了,但列與對角線則否,此時必須在A-D與C- B之間,作一些對應的調換,規則如下:1. 將A中每一列(中間列除外)的頭m個元素,與D中對應位置的元素調換。 2. 將A的中央列、中央那一格向左取m格,並與D中對應位置對調 3. 將C中每一列的倒數m-1個元素,與B中對應的元素對調 舉個實例來說,如何填6X6方陣,我們首先將之分解為奇數方陣,並填入數字,如下所示: 接下來進行互換的動作,互換的元素以不同顏色標示,如下:由於m-1的數為0,所以在這個例子中,C-B部份並不用進行對調。實作 C #include #include #define N 6 #define SWAP(x,y) int t; t = x; x = y; y = t; void magic_o(int N, int); void exchange(int N, int); int main(void) int squareNN = 0; int i, j; magic_o(square, N/2); exchange(square, N); for(i = 0; i N; i+) for(j = 0; j N; j+) printf(- , squareij); printf(n); return 0; void magic_o(int squareN, int n) int count, row, column; row = 0; column = n / 2; for(count = 1; count = n*n; count+) squarerowcolumn = count; / 填A squarerow+ncolumn+n = count + n*n; / 填B squarerowcolumn+n = count + 2*n*n; / 填C squarerow+ncolumn = count + 3*n*n; / 填D if(count % n = 0) row+; else row = (row = 0) ? n - 1 : row - 1 ; column = (column = n-1) ? 0 : column + 1; void exchange(int xN, int n) int i, j; int m = n / 4; int m1 = m - 1; for(i = 0; i n/2; i+) if(i != m) for(j = 0; j m; j+) / 處理規則 1 SWAP(xij, xn/2+ij); for(j = 0; j m1; j+) / 處理規則 2 SWAP(xin-1-j, xn/2+in-1-j); else / 處理規則 3 for(j = 1; j = m; j+) SWAP(xmj, xn/2+mj); for(j = 0; j n*n,按顺序填入,遇到对角线的不填。/再把n*n-1,在剩下的空中按顺序填入/再看4N阶的排法/把矩阵分成N个4阶的矩阵,各个矩阵按4阶排列#include#define N 8void main()int f2020;int i,j,k;k=1;for(i=0;iN;i+)for(j=0;jN;j+)if(i%4=j%4|(i%4+j%4=3)fij=N*N-k+1;k+;elsefij=k+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论