Java版九宫格算法
一、前言
被问到了一个九宫格算法。要求各行各列、斜线相加的值相等,这里简单记录下过程。
在此之前没想怎么解决,直接百度,然后网上给的要么是穷举或者 数独口诀,穷举还可以理解,数独口诀不知道怎么来的,所以按照那个方式只是把口诀变成了代码。所以这里使用了新的方式,只是可能思路不是别人想要的
二、思路
该算法设计思路如下:
首先每行相加的结果为15。为啥为15,因为总共三列,各个数不一样,所以1到9的和为45,除于3 结果为15。也可以去查关于幻方的问题。
由于九宫格的特性,中间的值会被计算四次,四个角会被计算三次,其余位置会被计算两次,所以可以知道,中间值为5。四个角的值为2、4、6、8。
由此知道中间值和四个角的值可求其余值。
三、代码
具体算法如下;
该算法只列举其中一种结果,如需其它结果更改角的位置即可。
//各列数字之和的数相加为 1-9相加的和除列数3 = 15@Testpublic void test4() {long startTime = System.currentTimeMillis();int[][] arry = new int[3][3];arry[1][1] = 5; //因为只有5会使用4次,角为三次,其余为两次,15*4 = 60 ,然后依次计算所有可能的数。int sum = 15;ArrayList<Integer> angle = new ArrayList<>();//各个角的值为固定值angle.add(6);angle.add(4);angle.add(2);angle.add(8);//所以5位于中间,跟五相关的三列数为arry[0][0] = angle.get(0);if (arry[0][0] == angle.get(0)){arry[2][2] = sum - arry[0][0] - arry[1][1];//然后将使用的两个角移除掉angle.remove(angle.get(0));angle.remove(Integer.valueOf(arry[2][2]));//已经求出两个角的值,那么剩下的角即为另外两个还没有使用的角//这时候随意找一个角即可, 因为两个角都可以使用arry[2][0] = angle.get(0);arry[0][2] = angle.get(1);arry[1][0] = sum - arry[0][0] - arry[2][0];arry[0][1] = sum - arry[0][0] - arry[0][2];arry[2][1] = sum - arry[0][1] - arry[1][1];arry[1][2] = sum - arry[0][2] - arry[2][2];}long endTime = System.currentTimeMillis();System.out.println("YM--->执行时间:"+(endTime - startTime));for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {System.out.print(arry[i][j]);}System.out.println("\n");}}
Java版九宫格算法相关推荐
- JAVA版连连看算法研究
JAVA连连看之算法: 连连看连接方式的类型:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:off ...
- Java版数独算法实现
数独的历史: 数独前身为"九宫格",最早起源于中国.数千年前,我们的祖先就发明了洛书,其特点较之现在的数独更为复杂,要求纵向.横向.斜向上的三个数字之和等于15,而非简单的九个数字 ...
- 基于Python3.6实现Java版murmurhash算法
Python3.6 实现java1.8 murmurhash 加密算法 前因后果 以下是初稿代码,验证无误(至少我的实例中没有出现偏差) 前因后果 由于最近工作涉及到python操作Java项目的缓存 ...
- Java 版 Prim 算法求最小生成树
最小生成树: 一个具有n个顶点的加权的无相连通图,用n-1条边连接这n个顶点,并且使得连接之后的所有边的权值之和最小的树. Prim算法:先以一个结点作为最小生成树的第一个结点,然后以迭代的方式找出与 ...
- java版排序算法简介及冒泡排序以及优化,选择排序,直接插入排序,希尔排序,堆排序,快速排序及其优化前言 2 分类 2 稳定性 3 时间复杂度 4 Java实现版本 5 1、冒泡排序 6 2、选择排序
好吧 ~~csdn太难用了....尼玛...写了半天的也无法弄进去...lz正在找更好地博客,or放在github上打算.. 下边是lz自己的有道云分享,大概内容是 http://note.youda ...
- java插入排序实现,经典(Java版)排序算法的分析及实现之一直接插入排序
预备知识 排序算法从功能上是对一个数据元素集合或序列重新排列成一个按数据元素某个相知有序的序列.从内存空间使用简单上看分为内部排序和外部排序. 内部排序是数据记录在内存中进行排序,适合不太大的元素序列 ...
- 数独游戏java版(一)--核心算法
之前学习javascript时用javascript写过一个数独游戏,最近看了一点java的内容,于是就心血来潮想搞一个java版的数独游戏. 现在将全部代码分享出来和大家学习交流,当然代码中有着各种 ...
- Twitter的分布式雪花算法 SnowFlake 每秒自增生成26个万个可排序的ID (Java版)
分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种简单一 ...
- 分布式主键解决方案----Twitter 雪花算法的原理(Java 版)
SnowFlake 雪花算法 对于分布式系统环境,主键ID的设计很关键,什么自增intID那些是绝对不用的,比较早的时候,大部分系统都用UUID/GUID来作为主键,优点是方便又能解决问题,缺点是插入 ...
- 经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】
经典十大排序算法[Java版完整代码] 写在前面的话 十大排序算法对比 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 插入排序 希尔排序 计数排序 桶排序 基数排序 完整测试类 写在前面的话 ...
最新文章
- 一次非常有意思的 SQL 优化经历!
- python server page_python web-server
- seaborn系列 (18) | 线性回归图regplot()
- try catch 之后是否会继续执行
- 二十九、电子商务服务推荐项目基本描述
- 1126 求递推序列的第N项 (Fnb + mod + 思维)
- 关于TensorFlow开发者证书,你想要的资源都在这里!
- python读取json数据教程_Python教程之解析json数据
- Webpack dev-server搭建本地服务
- matlab中设置拟合初值,如何确定自定义函数拟合时的参数初值?
- python教程简书_python教程
- 《上海悠悠接口自动化平台》-2.extract 提取结果与validate 校验结果
- Ps cc 2014 安装与错误修改
- 站班汇报 水印 加相册插件
- android keep倒计时,Android仿Keep运动休息倒计时圆形控件
- [有感而发]与刺客独行
- ORA-01722 无效数字出错原因以及以及分析总结
- 《让时间陪你慢慢变富》有感
- 大数据之Linux 基础
- 贵州六盘水计算机二级考点,2017年六盘水第二次职称计算机考试报名通知
热门文章
- 实验室的温湿度要求及其控制措施的详细讲解
- win7中怎么显示文件名后缀
- EXCEL常规格式数字转换为日期时间格式的方法
- jmeter 取样器
- 分析Windows二进制文件和嵌入式资源
- 博士申请 | 美国北卡州立大学胥栋宽老师招收深度学习方向全奖博士/硕士/博后...
- linux csr蓝牙驱动下载,佳能 CSR Bluetooth Device 驱动程序下载-更新佳能软件(蓝牙)...
- Hive分组统计前top N条记录
- 厦门大学计算机考研2020分数线,厦门大学2020考研分数线已公布
- 面试官问你期望的工资是多少,怎么回答最好?