常見程式演算:: 4N 魔方陣

文章推薦指數: 80 %
投票人數:10人

解法思路 OPENHOME.CC 常見程式演算 |老掉牙 河內塔 費氏數列 巴斯卡三角形 三色旗 老鼠走迷宮 騎士走棋盤 八皇后 八銀幣 康威生命遊戲 字串比對 背包問題 雙色、三色河內塔 得分排行 |「數」 最大訪客數 Eratosthenes篩選求質數 完美數 阿姆斯壯數 大數運算 指定位數的圓周率 |隨機 蒙地卡羅法求PI 洗牌 Craps賭博遊戲 約瑟夫問題 |組構 排列 格雷碼 子集 k組合 因數分解 加法因子 |排序 選擇、插入、氣泡排序 Heap排序-改良的選擇排序 Shell排序-改良的插入排序 Shaker排序-改良的氣泡排序 快速排序(一) 快速排序(二) 合併排序 基數排序 |搜尋 線性搜尋 二分搜尋 插補搜尋 費氏搜尋 |矩陣 稀疏矩陣 多維矩陣降維 上/下三角、對稱矩陣 奇數魔方陣 4N魔方陣 2(2N+1)魔方陣 |運算 中序式轉後序式 後序式運算 Quine GitHub Twitter Facebook LinkedIn Designs Tags BuiltwithbyHugo HOME> 常見程式演算> 矩陣> 4N魔方陣 解法思路 程式實作 magicsquare matrix C Java Python Scala Ruby JavaScript 4N魔方陣 December12,2021 4N魔方陣將1到n的數字排列在nxn的方陣,n限定為4的倍數,也稱這種方陣為雙偶數(evenly-even)方陣,各行、各列與各對角線的和必須相同。

解法思路 4x4方陣可以用兩個方陣來解,其中一個從上而下、由左而右,由1依序填寫,不過對角線不填數字,另一個反序由16開始填,而且只有對角線才填數字,將兩個方陣合起來就是解答了: 如果N大於2,以4X4為單位畫對角線: 至於對角線的位置該如何判斷,有兩個公式,如下所示: 左上至右下:j%4==i%4 右上至左下:(j%4+i)%4==1 程式實作 C Java Python Scala Ruby JavaScript Haskell #include #include #defineN8 intmain(void){ intsquare[N+1][N+1]={0}; inti,j; 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("%2d",square[i][j]); printf("\n"); } return0; } publicclassMatrix{ publicstaticint[][]magic(intn){ int[][]matrix=newint[n][n]; for(intj=1;j<=n;j++){ for(inti=1;i<=n;i++){ if(j%4==i%4||(j%4+i)%4==1) matrix[i-1][j-1]=(n+1-i)*n-j+1; else matrix[i-1][j-1]=(i-1)*n+j; } } returnmatrix; } publicstaticvoidmain(String[]args){ for(int[]row:Matrix.magic(8)){ for(intnumber:row){ System.out.printf("%2d",number); } System.out.println(); } } } defmagic(n): matrix=[] foriinrange(n): matrix.append([0]*n) forjinrange(1,n+1): foriinrange(1,n+1): ifj%4==i%4or(j%4+i)%4==1: matrix[i-1][j-1]=(n+1-i)*n-j+1 else: matrix[i-1][j-1]=(i-1)*n+j returnmatrix matrix=magic(8) print(matrix) objectMatrix{ defmagic(n:Int)={ valmatrix=newArray[Array[Int]](n,n) for(j{ row.foreach(number=>printf("%2d",number)) println() }) defmagic(n) matrix=Array.new(n){ Array.new(n,0) } 1.upto(n){|j| 1.upto(n){|i| ifj%4==i%4||(j%4+i)%4==1 matrix[i-1][j-1]=(n+1-i)*n-j+1 else matrix[i-1][j-1]=(i-1)*n+j end } } matrix end matrix=magic(8) pmatrix functionmagic(n){ letmatrix=[]; for(leti=0;i



請為這篇文章評分?