1. 程式人生 > >幻方常規解法彙總

幻方常規解法彙總

    沒法,組合數學還考幻方構造。這東西不看解法真不會寫,雖然沒見有啥用,但還是記錄下,免得日後再找。按目前填寫幻方的方法,是把幻方分成了三類,即奇數階幻方雙偶階幻方單偶階幻方。下面按這三類幻方,列出最常用解法(考試用,不求強大,只求有效!)。

奇數階幻方(羅伯法)

奇數階幻方最經典的填法是羅伯法。填寫的方法是:

把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象限按奇數階幻方的填法填數。

3765290763458515555

(2)在A象限的中間行、中間格開始,按自左向右的方向,標出k格。A象限的其它行則標出最左邊的k格。將這些格,和C象限相對位置上的數,互換位置。

2

(3)在B象限任一行的中間格,自右向左,標出k-1列。(注:6階幻方由於k-1=0,所以不用再作B、D象限的資料交換), 將B象限標出的這些數,和D象限相對位置上的數進行交換,就形成幻方。

3

下面是6階幻方的填法:6=4×1+2,這時k=1

4

相關推薦

常規解法彙總

    沒法,組合數學還考幻方構造。這東西不看解法真不會寫,雖然沒見有啥用,但還是記錄下,免得日後再找。按目前填寫幻方的方法,是把幻方分成了三類,即奇數階幻方、雙偶階幻方、單偶階幻方。下面按這三類幻方,列出最常用解法(考試用,不求強大,只求有效!)。 奇數階幻方(羅

神奇的(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>