博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自娱小程序--九宫格
阅读量:6218 次
发布时间:2019-06-21

本文共 3171 字,大约阅读时间需要 10 分钟。

package com.arvey.eventbank.crash;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class JiuGG {
/*
* 构建数据结构
* Map<1-5整数(亦做数值使用),两层嵌夽整型SET(两个数值,升序) key + sum(set) = 15
*/
Map<Integer,Set<Set<Integer>>> nine = new HashMap<Integer,Set<Set<Integer>>>();
// a+b = sum, both a and b (beginNum ... 9)
public Set<Integer> getSets(int sum,int beginNum){
boolean nullset = true;
Set<Integer> res=null;
//except sum-1
for(int x=beginNum;x<sum/2+1;x++){
if(x == 15-sum)
continue;
for(int m=9;m>sum/2;m--){
if(m == 15-sum) continue;
if(x+m == sum){
if(nullset){
res = new HashSet<Integer>();
res.add(x);
res.add(m);
nullset = false;
break;
}
}
if(!nullset)
break;
}
return res;
}
//firNum ( 1 ... 5)
public Set<Set<Integer>> getAllSetsByNum(int firNum){
Set<Set<Integer>> res = new HashSet<Set<Integer>>();
int div=(15-firNum)/2;
for(int i=1;i<=div;i++){
Set<Integer> aSet = getSets(15-firNum,i);
if(aSet != null)
res.add(aSet);
}
return res;
}
//get all groups, x+y+z = 15
public void initialNums(){
for(int i=1;i<=5;i++){
Set<Set<Integer>> aSet = getAllSetsByNum(i);
if( aSet !=null )
nine.put(i, aSet);
}
}
/***
* 九宫格特点(数字代表位置)
* 1 2 3
* 4 5 6
* 7 8 9
 *  5位置被使用四次,1+5+9 2+5+8 3+5+7 4+5+6
*  1,3,7,9位置被使用三次   1+2+3 1+4+7 1+5+9
 *  2,4,6,8位置被使用两次, 1+2+3 和 2+5+8 
*/
boolean isPos1379(Set<Set<Integer>> specialkey,Integer value){
boolean res = false;
for(Set<Integer> aset:specialkey){
if(aset.contains(Integer.valueOf( 10 - value))){
res = true;
break;
}
}
return res;
}
public void printJiuGG(){
/*确定5,1,2,3,4,7的位置上的数值,规则取Map里key最小的
* 位置5,只有5被使用四次,所以找出包涵Set最多的key就是5位置的元素
* 位置1,取key最小的,有3组数,不取有5的一组的两组,这五个数会放在,12347的位置
* 位置3,7, 在key = 1的嵌夽数据集中,找到另两相加等于10的数,一个放在3,另一个落在7
* 位置2,必须被引用两次的数据中,且不能在有5的一组数中
* 位置4, 另一组有两组数据且
*/
Set<Integer> keys = nine.keySet();//放入进有序,所以取第一个有三组数的key值,
int pos1 = -1;
Set<Set<Integer>> aSet = null;
for(Integer key:keys){
aSet = (Set<Set<Integer>>)nine.get(key);
if( aSet.size() == 3 ){
pos1 =  key;
break;
}
}
Set<Set<Integer>> pos1Set = (Set<Set<Integer>>)nine.get(pos1);
Set<Integer> pos123 = null;
Set<Integer> pos147 = null;
for(Set<Integer> as : pos1Set){
if(as.contains(Integer.valueOf(5)))
continue;
else if(pos123 == null)
pos123 = as;
else
pos147 = as;
}
//pos123中确定 位置2 3
int pos2 = -1,pos3 = -1;
for(Integer aInt:pos123){
if(isPos1379(pos1Set,aInt)){
pos3 = aInt;
} else
pos2 = aInt;
}
//pos147中确定 位置7 4
int pos4 = -1,pos7 = -1;
for(Integer aInt:pos147){
if(isPos1379(pos1Set,aInt)){
pos7 = aInt;
} else
pos4 = aInt;
}
System.out.println("Print the Result: 1-2-3 : "+pos1+"-"+pos2+"-"+pos3);
System.out.println("Print the Result: 4-5-6 : "+pos4+"-"+5+"-"+(10-pos4));
System.out.println("Print the Result: 7-8-9 : "+pos7+"-"+(10-pos2)+"-"+(10-pos1));
}
public Map<Integer,Set<Set<Integer>>> getNine(){
return nine;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
JiuGG jiuGG = new JiuGG();
jiuGG.initialNums();
Set<Integer> keys = jiuGG.getNine().keySet();
for(Integer key:keys){
System.out.println("Key :"+key);
Set<Set<Integer>> sets = (Set<Set<Integer>>)jiuGG.getNine().get(key);
for(Set<Integer> ele:sets){
System.out.println(ele);
}
}
jiuGG.printJiuGG();
}
}

转载地址:http://akmja.baihongyu.com/

你可能感兴趣的文章
斗地主AI算法——第二章の数据结构
查看>>
【转】Go maps in action
查看>>
安卓巴士精选Android开发教程
查看>>
c++中捕捉内存泄露、异常
查看>>
Spark 优化器 ML的论文
查看>>
Spring透过ApplicationListener来触发contextrefreshedevent事件
查看>>
socket连接和TCP连接的关系
查看>>
ABP框架 - 缓存( 转)
查看>>
S域传递函数的零点和极点
查看>>
网络免费API接口整理
查看>>
PHP 运行模式
查看>>
Python:range 对象并不是迭代器
查看>>
TortoiseGit 软件安装过程截图及配置
查看>>
来自一个程序员的反思
查看>>
为什么我们应该使用 pnpm(译)
查看>>
图片服务器------FastDFS
查看>>
springboot--如何优雅的使用mybatis
查看>>
以太坊智能合约学习笔记(一)
查看>>
一篇文章带你了解js作用域
查看>>
说说分布式事务(五)
查看>>