幻方常規解法彙總
沒法,組合數學還考幻方構造。這東西不看解法真不會寫,雖然沒見有啥用,但還是記錄下,免得日後再找。按目前填寫幻方的方法,是把幻方分成了三類,即奇數階幻方、雙偶階幻方、單偶階幻方。下面按這三類幻方,列出最常用解法(考試用,不求強大,只求有效!)。
奇數階幻方(羅伯法)
奇數階幻方最經典的填法是羅伯法。填寫的方法是:
把1(或最小的數)放在第一行正中; 按以下規律排列剩下的(n×n-1)個數:
1、每一個數放在前一個數的右上一格;
2、如果這個數所要放的格已經超出了頂行那麼就把它放在底行,仍然要放在右一列;
3、如果這個數所要放的格已經超出了最右列那麼就把它放在最左列,仍然要放在上一行;
4、如果這個數所要放的格已經超出了頂行且超出了最右列,那麼就把它放在前一個數的下一行同一列的格內;
5、如果這個數所要放的格已經有數填入,那麼就把它放在前一個數的下一行同一列的格內。
例,用該填法獲得的5階幻方:
17 | 24 | 1 | 8 | 15 |
23 | 5 | 7 | 14 | 16 |
4 | 6 | 13 | 20 | 22 |
10 | 12 | 19 | 21 | 3 |
11 | 18 | 25 | 2 | 9 |
雙偶數階幻方(對稱交換法)
所謂雙偶階幻方就是當n可以被4整除時的偶階幻方,即4K階幻方。在說解法之前我們先說明一個“互補數”定義:就是在 n 階幻方中,如果兩個數的和等於幻方中最大的數與 1 的和(即 n×n+1),我們稱它們為一對互補數 。如在三階幻方中,每一對和為 10 的數,是一對互補數 ;在四階幻方中,每一對和為 17 的數,是一對互補數 。
雙偶數階幻方的對稱交換解法:
先看看4階幻方的填法:將數字從左到右、從上到下按順序填寫:
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
內外四個角對角上互補的數相易,(方陣分為兩個正方形,外大內小,然後把大正方形的四個對角上的數字對換,小正方形四個對角上的數字對換)即(1,16)(4,13)互換(6,11)(7,10)互換即可。
16 | 2 | 3 | 13 |
5 | 11 | 10 | 8 |
9 | 7 | 6 | 12 |
4 | 14 |
15 | 1 |
對於n=4k階幻方,我們先把數字按順序填寫。寫好後,按4×4把它劃分成k×k個方陣。因為n是4的倍數,一定能用4×4的小方陣分割。然後把每個小方陣的對角線,象製作4階幻方的方法一樣,對角線上的數字換成互補的數字,就構成幻方。
以8階幻方為例:
(1) 先把數字按順序填。然後,按4×4把它分割成4塊(如圖)
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 |
(2) 每個小方陣對角線上的數字(如左上角小方陣部分),換成和它互補的數。
64 | 2 | 3 | 61 | 60 | 6 | 7 | 57 |
9 | 55 | 54 | 12 | 13 | 51 | 50 | 16 |
17 | 47 | 46 | 20 | 21 | 43 | 42 | 24 |
40 | 26 | 27 | 37 | 36 | 30 | 31 | 33 |
32 | 34 | 35 | 29 | 28 | 38 | 39 | 25 |
41 | 23 | 22 | 44 | 45 | 19 | 18 | 48 |
49 | 15 | 14 | 52 | 53 | 11 | 10 | 56 |
8 | 58 | 59 | 5 | 4 | 62 | 63 | 1 |
單偶數階幻方(象限對稱交換法)
以n=10為例,10=4×2+2,這時k=2
(1)把方陣分為A,B,C,D四個象限,這樣每一個象限肯定是奇數階。用羅伯法,依次在A象限,D象限,B象限,C象限按奇數階幻方的填法填數。
(2)在A象限的中間行、中間格開始,按自左向右的方向,標出k格。A象限的其它行則標出最左邊的k格。將這些格,和C象限相對位置上的數,互換位置。
(3)在B象限任一行的中間格,自右向左,標出k-1列。(注:6階幻方由於k-1=0,所以不用再作B、D象限的資料交換), 將B象限標出的這些數,和D象限相對位置上的數進行交換,就形成幻方。
下面是6階幻方的填法:6=4×1+2,這時k=1
相關推薦
幻方常規解法彙總
沒法,組合數學還考幻方構造。這東西不看解法真不會寫,雖然沒見有啥用,但還是記錄下,免得日後再找。按目前填寫幻方的方法,是把幻方分成了三類,即奇數階幻方、雙偶階幻方、單偶階幻方。下面按這三類幻方,列出最常用解法(考試用,不求強大,只求有效!)。 奇數階幻方(羅
神奇的幻方(NOIP2015)(真·純模擬)
ace logs 模擬題 難度 %d n) -- lin == 原題傳送門 這是道SB模擬題,NOIP--難度 直接貼代碼 #include<iostream> #include<cstdio> using namespace std; int n
反幻方
九宮格 記載 多少 ++ 全排列 cnblogs nbsp 鏡像 提交 我國古籍很早就記載著 2 9 47 5 36 1 8 這是一個三階幻方。每行每列以及對角線上的數字相加都相等。 下面考慮一個相反的問題。可不可以用 1~9 的數字填入九宮格。使得:每行每列每個對角線上的
洛谷——P2615 神奇的幻方 【Noip2015 day1t1】
幻方 sin main 100% col 輸入 ons hellip names https://www.luogu.org/problem/show?pid=2615 題目描述 幻方是一種很神奇的N*N矩陣:它由數字1,2,3,……,N*N
COGS 2104. [NOIP2015]神奇的幻方
ima turn upload != return label logs 技術分享 blank ★ 輸入文件:2015magic.in 輸出文件:2015magic.out 簡單對比時間限制:1 s 內存限制:256 MB 模擬 一開始數組
Hihocoder1662 : 查找三階幻方([Offer收割]編程練習賽40)(暴力)
scanf action () -s blog col pre nbsp ogg 時間限制:10000ms 單點時限:1000ms 內存限制:256MB 描述 給定一個N x M的矩陣,請你數一數其中有多少個3 x 3的子矩陣可以構成三階幻方
求N奇數階幻方
篩選 str ava cal http col imp alpha 右上角 1. 如果矩陣滿足條件,那麽對任意,也滿足條件。證明顯然。 設為奇數,我們現在構造一個n階幻方包含0到所有數這裏x,y滿足同余式待確定。 由於該方程組的系數矩陣的行列式為1,所以對任意i,j有唯
用python numpy實現幻方
nump param eva validate d+ 矩陣 axis numpy int() # -*- coding: utf-8 -*-#利用numpy模塊構造幻方import numpy as np#列表循環向左移offset位def shift_left(lst,
【noip2015】神奇的幻方
構建 == cst name long long 一行 題解 輸出 題目 題目描述 幻方是一種很神奇的 N ? N 矩陣:它由數字 1,2,3, … … , N ? N 構成,且每行、每列及兩條對角線上的數字之和都相同。 當 N 為奇數時,我們可以通過以下方法構建一個幻方:
算法33---矩陣中的幻方
解釋 數組 不同 color 另一個 class inside tro 數字 1、題目: 3 x 3 的幻方是一個填充有從 1 到 9 的不同數字的 3 x 3 矩陣,其中每行,每列以及兩條對角線上的各數之和都相等。 給定一個由整數組成的 N × N 矩陣,其中有多少個 3
hdu3686Traffic Real Time Query System 圓方樹解法
hdu3686Traffic Real Time Query System 題目傳送門 分析 題目大意:給定一張無向圖,每次給兩條邊,求從一條邊走到另一條邊的必經點個數。 這麼好的一道圓方樹模板居然都寫縮點! 處理點雙的時候新開一個邊的棧,同時彈棧,這樣可以處理出每條邊所屬的
金科2017年程設賽題解——神奇的幻方
import java.util.Scanner; public class Square { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n =
填個幻方如何?
轉自https://www.cnblogs.com/codingmylife/archive/2010/12/24/1915728.html 按目前填寫幻方的方法,是把幻方分成了三類,即奇數階幻方、雙偶階幻方、單偶階幻方。下面按這三類幻方,列出最常用解法。 奇數階幻方(羅伯法) 奇數階幻
NOIP2015 Day1 T1 神奇的幻方
純模擬 程式碼: #include<cstdio> #include<iostream> #include<cstring> using namespace std; int data[41][41];//矩陣儲存 int ma
【Luogu1996】約瑟夫問題(模擬,解法彙總)
problem n個人,每次數到m的人出隊 輸出出隊順序 n<=100 solution1 模擬:每次列舉第m個人出隊 O(n,m) #include<iostream> using namespace std;
Jmeter 常規設定彙總
目錄 文章目錄 目錄 0x01 Jmeter-察看結果樹-響應資料,中文顯示亂碼問題處理 0x02 Jmeter 設定為預設中文頁面 0x01 Jmeter-察看結果樹-響應資料,中文顯示亂碼問題處理 檔案位置:jmeter\bin
【ZZULIOJ】1203: 做幻方
題目 1203: 做幻方 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 388 Solved: 89 (https://acm.zzuli.edu.cn/zzuliacm/bbs.php?pid=1203) D
【qduoj】奇數階幻方 (構造)
題幹: C語言_魔方陣 描述 魔方陣是一個古老的智力問題,它要求在一個m×m的矩陣中填入1~m2的數字(m為奇數),使得每一行、每一列、每條對角線的累加和都相等,如下為5階魔方陣示例。 15 8 1 24 17 16 14 7 5 23
三階幻方(一維表二維進行深搜列舉)
三階幻方 時限:1000ms 記憶體限制:10000K 總時限:3000ms 描述: 三階幻方是最簡單的幻方,又叫九宮格,是由1,2,3,4,5,6,7,8,9九個數字組成的一個三行三列的矩陣,其對角線、橫行、縱向的的和都為15。 輸入: 無 輸出:
四階幻方(資訊保安演算法設計實驗)
資訊保安演算法設計的實驗之一 //#include"stdafx.h" #include <stdio.h> #include <string.h> #include <algorithm> #include<iostream>