当前位置: 首页 > 编程笔记 >

JavaScript实现三阶幻方算法谜题解答

丁景山
2023-03-14
本文向大家介绍JavaScript实现三阶幻方算法谜题解答,包括了JavaScript实现三阶幻方算法谜题解答的使用技巧和注意事项,需要的朋友参考一下

谜题

三阶幻方。试将1~9这9个不同整数填入一个3×3的表格,使得每行、每列以及每条对角线上的数字之和相同。

策略

穷举搜索。列出所有的整数填充方案,然后进行过滤。

JavaScript解


/**

 * Created by cshao on 12/28/14.

 */

function getPermutation(arr) {   if (arr.length == 1) {     return [arr];   }

  var permutation = [];   for (var i=0; i<arr.length; i++) {     var firstEle = arr[i];     var arrClone = arr.slice(0);     arrClone.splice(i, 1);     var childPermutation = getPermutation(arrClone);     for (var j=0; j<childPermutation.length; j++) {       childPermutation[j].unshift(firstEle);     }     permutation = permutation.concat(childPermutation);   }   return permutation; }

function validateCandidate(candidate) {   var sum = candidate[0] + candidate[1] + candidate[2];   for (var i=0; i<3; i++) {     if (!(sumOfLine(candidate,i)==sum && sumOfColumn(candidate,i)==sum)) {       return false;     }   }   if (sumOfDiagonal(candidate,true)==sum && sumOfDiagonal(candidate,false)==sum) {     return true;   }   return false; } function sumOfLine(candidate, line) {   return candidate[line*3] + candidate[line*3+1] + candidate[line*3+2]; } function sumOfColumn(candidate, col) {   return candidate[col] + candidate[col+3] + candidate[col+6]; } function sumOfDiagonal(candidate, isForwardSlash) {   return isForwardSlash ? candidate[2]+candidate[4]+candidate[6] : candidate[0]+candidate[4]+candidate[8]; }

var permutation = getPermutation([1,2,3,4,5,6,7,8,9]); var candidate; for (var i=0; i<permutation.length; i++) {   candidate = permutation[i];   if (validateCandidate(candidate)) {     break;   } else {     candidate = null;   } } if (candidate) {   console.log(candidate); } else {   console.log('No valid result found'); }

结果



[ 2, 7, 6, 9, 5, 1, 4, 3, 8 ]

描绘成幻方即为:



2    7    6

9    5    1

4    3    8

分析

使用此策略理论上可以获取任意n阶幻方的解,但实际上只能获得3阶幻方这一特定解,因为当n>3时,获取所有填充方案这一穷举操作的耗时将变得极其巨大。

 类似资料:
  • 本文向大家介绍JavaScript实现微信红包算法及问题解决方法,包括了JavaScript实现微信红包算法及问题解决方法的使用技巧和注意事项,需要的朋友参考一下 专栏停更了很久,向大家说声抱歉。今天的主题是使用JavaScript模拟实现微信抢红包的算法。这个题目看起来很简单,不就是一个随机函数吗?我们一起实现看看。 我们假设有一个100元的红包,要发给10个人。为了保证公平,算法需要保证以下的

  • 本文向大家介绍纯javascript代码实现计算器功能(三种方法),包括了纯javascript代码实现计算器功能(三种方法)的使用技巧和注意事项,需要的朋友参考一下 今天来分享一下用纯javascript代码编写的一个计算器程序,很多行业都能用到这个程序,例如做装修预算、贷款利率等等。 首先来看一下完成后的效果: 方法一: 具体编写代码如下: 代码二: 方法三: 以上通过三种方法实现了纯java

  • 本文向大家介绍javascript笛卡尔积算法实现方法,包括了javascript笛卡尔积算法实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript笛卡尔积算法实现方法。分享给大家供大家参考。具体分析如下: 这里可根据给的对象或者数组生成笛卡尔积 希望本文所述对大家的javascript程序设计有所帮助。

  • 本文向大家介绍JavaScript冒泡算法原理与实现方法深入理解,包括了JavaScript冒泡算法原理与实现方法深入理解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript冒泡算法。分享给大家供大家参考,具体如下: 在面试中经常会遇到面试官问到冒泡算法。今天总结一下。 ###概念 有一组数,依次比较两个相邻的数,如果他们的顺序(如从大到小或从小到大等)错误就把他们交换过来

  • 本文向大家介绍JavaScript实现SHA-1加密算法的方法,包括了JavaScript实现SHA-1加密算法的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript实现SHA-1加密算法的方法。分享给大家供大家参考。具体实现方法如下: 调用方法:hex_sha1即可。 希望本文所述对大家的javascript程序设计有所帮助。

  • 本文向大家介绍Android 三种实现定时器详解及实现方法,包括了Android 三种实现定时器详解及实现方法的使用技巧和注意事项,需要的朋友参考一下 方法一:Handler+Thread 方法二:Handler类自带的postDelyed 方法三:Handler+Timer+TimerTask 以上就是对Android 定时器的资料整理后续继续补充相关知识,谢谢大家对本站的支持!