• Algorithm Gossip (50) 4N 魔方阵


    前言

    This Series aritcles are all based on the book 《经典算法大全》; 对于该书的所有案例进行一个探究和拓展,并且用python和C++进行实现; 目的是熟悉常用算法过程中的技巧和逻辑拓展。

    提出问题

    50.Algorithm Gossip: 4N 魔方阵

    说明

    与 奇数魔术方阵 相同,在于求各行、各列与各对角线的和相等,而这次方阵的维度是4的倍
    数。

    解法

    先来看看4X4方阵的解法:
    简单的说,就是一个从左上由1依序开始填,但遇对角线不填,另一个由左上由16开始填,但只填在对角线,再将两个合起来就是解答了;如果N大于2,则以 4X4为单位画对角线:至于对角线的位置该如何判断,有两个公式,有兴趣的可以画图印证看看,如下所示:
    左上至右下 :j j % % 4 4 = == i i % % 4 4
    右上至左下 :j (j % % 4 4 + + i i % % ) 4) = == 1 1

    分析和解释

    代码

    #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("%2d ", square[i][j]);
    		printf("
    ");
    		}
    	return 0;
    	}
    

    拓展和关联

    简单题, 同上: 有兴趣的关注下幻方系列即可。几年前我对幻方特别感兴趣, 还买了一本 幻方吧 吧友所作的书, 现在都没什么时间去关注了。

    后记

    参考书籍

    • 《经典算法大全》
    • 维基百科
  • 相关阅读:
    Linux中的邮件发送
    Python学习笔记18-发送邮件
    Ansible学习笔记
    eclipse使用maven打包时去掉测试类
    CentOS安装redis
    spring boot 部署
    sprint boot 配置
    spring-boot 学习笔记一
    不要容忍破窗户
    阿里云安装Oracle
  • 原文地址:https://www.cnblogs.com/actanble/p/6711261.html
Copyright © 2020-2023  润新知