java实现第六届蓝桥杯四阶幻方
四阶幻方
把1~16的数字填入4x4的方格中,使得行、列以
及两个对角线的和都相等,满足这样的特征时称
为:四阶幻方。
四阶幻方可能有很多方案。如果固定左上角为1
,请计算一共有多少种方案。
比如:
1 2 15 16
12 14 3 5
13 7 10 4
8 11 6 9
以及:
1 12 13 8
2 14 7 11
15 3 10 6
16 5 4 9
就可以算为两种不同的方案。
请提交左上角固定为1时的所有方案数字,不要
填写任何多余内容或说明文字。
答案:416
import java.util.ArrayList;
public class Main {
public static boolean[] used = new boolean[17];
public static ArrayList<String> list = new ArrayList<String>();
public static int count = 0;
public boolean check(int[] A, int step) {
if(step >= 4)
if(A[0] + A[1] + A[2] + A[3] != 34)
return false;
if(step >= 8)
if(A[4] + A[5] + A[6] + A[7] != 34)
return false;
if(step >= 12)
if(A[8] + A[9] + A[10] + A[11] != 34)
return false;
if(step >= 13)
if(A[0] + A[4] + A[8] + A[12] != 34 || A[3] + A[6] + A[9] + A[12] != 34)
return false;
if(step >= 14)
if(A[1] + A[5] + A[9] + A[13] != 34)
return false;
if(step >= 15)
if(A[2] + A[6] + A[10] + A[14] != 34)
return false;
if(step >= 16)
if(A[3] + A[7] + A[11] + A[15] != 34 || A[0] + A[5] + A[10] + A[15] != 34)
return false;
return true;
}
public void dfs(int[] A, int step) {
if(check(A, step) == false)
return;
if(step == 16) {
StringBuffer s = new StringBuffer("");
for(int i = 0;i < A.length;i++)
s.append(A[i]);
if(!list.contains(s.toString())) {
list.add(s.toString());
count++;
}
return;
}
for(int i = 2;i <= 16;i++) {
if(used[i] == false) {
used[i] = true;
A[step] = i;
dfs(A, step + 1);
used[i] = false;
}
}
}
public static void main(String[] args) {
Main test = new Main();
int[] A = new int[16];
A[0] = 1;
used[1] = true;
test.dfs(A, 1);
System.out.println(count);
}
}
java实现第六届蓝桥杯四阶幻方的更多相关文章
- java实现第六届蓝桥杯居民集会
居民集会 蓝桥村的居民都生活在一条公路的边上,公路的长度为L,每户家庭的位置都用这户家庭到公路的起点的距离来计算,第i户家庭距起点的距离为di. 每年,蓝桥村都要举行一次集会.今年,由于村里的人口太多 ...
- java实现第六届蓝桥杯切开字符串
切开字符串 Pear有一个字符串,不过他希望把它切成两段. 这是一个长度为N(<=10^5)的字符串. Pear希望选择一个位置,把字符串不重复不遗漏地切成两段,长度分别是t和N-t(这两段都必 ...
- java实现第六届蓝桥杯表格计算
表格计算 某次无聊中, atm 发现了一个很老的程序.这个程序的功能类似于 Excel ,它对一个表格进行操作. 不妨设表格有 n 行,每行有 m 个格子. 每个格子的内容可以是一个正整数,也可以是一 ...
- java实现第六届蓝桥杯穿越雷区
穿越雷区 题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能 ...
- java实现第六届蓝桥杯密文搜索
密文搜索 福尔摩斯从X星收到一份资料,全部是小写字母组成. 他的助手提供了另一份资料:许多长度为8的密码列表. 福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的. 请你编写一个程序,从第一份资料 ...
- java实现第六届蓝桥杯奇怪的数列
奇怪的数列 从X星截获一份电码,是一些数字,如下: 13 1113 3113 132113 1113122113 - YY博士经彻夜研究,发现了规律: 第一行的数字随便是什么,以后每一行都是对上一行& ...
- java实现第六届蓝桥杯奇妙的数字
奇妙的数字 奇妙的数字 小明发现了一个奇妙的数字.它的平方和立方正好把0~9的10个数字每个用且只用了一次. 你能猜出这个数字是多少吗? 请填写该数字,不要填写任何多余的内容. 结果:69 impor ...
- java实现第六届蓝桥杯循环节长度
循环节长度 两个整数做除法,有时会产生循环小数,其循环部分称为:循环节. 比如,11/13=6=>0.846153846153..... 其循环节为[846153] 共有6位. 下面的方法,可以 ...
- java实现第六届蓝桥杯垒骰子
垒骰子 题目描述 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰 ...
随机推荐
- jbpm4.4 timer的使用
今天学习了jbpm4 的timer使用,一直测试都不成功:配置如下: <?xml version="1.0" encoding="UTF-8"?> ...
- sudo apt-get update 与 sudo apt-get upgrate 的区别
1.sudo gedit /etc/apt/sources.list 源列表里面放置的一行行网址,在这个文件里加入或者注释(加#)掉一些源后,保存.这时候,我们的源列表里指向的软件就会增加或减少一 ...
- es6中class类的全方面理解
传统的javascript中只有对象,没有类的概念.它是基于原型的面向对象语言.原型对象特点就是将自身的属性共享给新对象.这样的写法相对于其它传统面向对象语言来讲,很有一种独树一帜的感脚!非常容易让人 ...
- vue中mixins的使用方法和注意点(详)
mixins基础概况 vue中的解释是这样的,如果觉得语言枯燥的可以自行跳过嘿~ 混入 (mixins): 是一种分发 Vue 组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使 ...
- 数据库范式1NF 2NF 3NF详细阐述
范式:关系数据库中的关系是要满足一定要求的,满足不同程度要求的不同范式.满足最低要求的叫第一范式,简称1NF ,在第一范式中满足进一步要求的为第二范式,其余以此类推.通俗来说是满足数据库关系表中的一套 ...
- 利用js实现 禁用浏览器后退| 去除上一个历史记录链接
也是查找了好多资料才找到的,这种方式,可以消除 后退的所有动作.包括 键盘.鼠标手势等产生的后退动作. <script language="javascript"> / ...
- uefi win10 Ubuntu 18的安装
uefi win10 Ubuntu 18的安装 (Ubuntu折腾的第一天) 安装时的踩坑记录
- view组件的封装是否需要特有模型?
必须需要. 现在接手的老项目,所有自定义组件全部使用的原始的全量数据,作为模型给view用来展示. 结果发现,基本数据的选择错误,需要选择另一个数据作为基本数据,这导致一个很麻烦的问题,需要改动全部的 ...
- docker-compose 命令详解
1.docker-compose的使用非常类似于docker命令的使用,但是需要注意的是大部分的compose命令都需要到docker-compose.yml文件所在的目录下才能执行. 2.[Linu ...
- Oracle数字格式化
@ 目录 Oracle数字格式化 开发中的常见问题 数字格式模型元素 Oracle数字格式化 A format model is a character literal that describes ...