魔方阵C语言设计方法及设计理念.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
魔方阵C语言设计方法及设计理念

1、Algorithm Gossip: 4N 魔方陣說明與 /cwbwebhome/article/article3/AlgorithmGossip/OddArray.htm奇數魔術方陣 相同,在於求各行、各列與各對角線的和相等,而這次方陣的維度是4的倍數。解法先來看看4X4方陣的解法: 簡單的說,就是一個從左上由1依序開始填,但遇對角線不填,另一個由左上由16開始填,但只填在對角線,再將兩個合起來就是解答了;如果N大於2,則以 4X4為單位畫對角線: 至於對角線的位置該如何判斷,有兩個公式,有興趣的可以畫圖印證看看,如下所示:if(i%4==j%4||(i%4+j%4==3)//zai duijiao xian shang實作C #include stdio.h #include stdlib.h #define N 8 int main(void) { int i, j; int square[N+1][N+1] = {0}; for(j = 1; j = N; j++) { for(i = 1; i = N; i++){ if(j % 4 == i % 4 || (j % 4 + i % 4) == 1) square[i][j] = (N+1-i) * N -j + 1; else square[i][j] = (i - 1) * N + j; } } for(i = 1; i = N; i++) { for(j = 1; j = N; j++) printf(- , square[i][j]); 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之間,作一些對應的調換,規則如下:將A中每一列(中間列除外)的頭m個元素,與D中對應位置的元素調換。 將A的中央列、中央那一格向左取m格,並與D中對應位置對調 將C中每一列的倒數m-1個元素,與B中對應的元素對調 舉個實例來說,如何填6X6方陣,我們首先將之分解為奇數方陣,並填入數字,如下所示: 接下來進行互換的動作,互換的元素以不同顏色標示,如下:由於m-1的數為0,所以在這個例子中,C-B部份並不用進行對調。實作C #include stdio.h #include stdlib.h #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 square[N][N] = {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(- , square[i][j]); printf(\n); } return 0; } void magic_o(int square[][N], int n) { int count, row, column; row = 0; column = n / 2; for(count = 1; count = n*n; count++) { square[row][column] = count; // 填A square[row+n][column+n] = count + n*n; // 填B square[row][column+n] = count + 2*n*n; // 填C square[row+n][column] = 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 x[][N], int n) { int i, j; int m = n / 4; int m1 = m - 1; for(i = 0; i

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档