自娱小程序--九宫格

简介: 定义好数据结构,事半功倍
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();
}
}
目录
相关文章
|
17天前
|
小程序 JavaScript
【微信小程序】之自定义九宫格展示row-grid(每行显示三个)
【微信小程序】之自定义九宫格展示row-grid(每行显示三个)
|
3月前
只用一个背景图片实现九宫格抽奖(uniapp纯代码)
只用一个背景图片实现九宫格抽奖(uniapp纯代码)
39 0
鼠标放上边框变虚转圈效果demo效果示例(整理)
鼠标放上边框变虚转圈效果demo效果示例(整理)
|
7月前
|
JavaScript
js鼠标放图片上==放大镜显示效果demo效果示例(整理)
js鼠标放图片上==放大镜显示效果demo效果示例(整理)
|
7月前
|
Python
飞机大战-创建窗口(1)
用Python编程,编写飞机大战-创建窗口。
35 0
|
8月前
|
C语言 C++ Windows
【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )(内含超好玩的c++游戏链接)
【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )(内含超好玩的c++游戏链接)
260 0
【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )(内含超好玩的c++游戏链接)
|
11月前
|
小程序 API
零基础学小程序007----首页轮播图,可以自动轮播,循环轮播,定时轮播
零基础学小程序007----首页轮播图,可以自动轮播,循环轮播,定时轮播
|
数据可视化
搭建完菜单后运行不显示菜单的原因及其解决方法(拼图小游戏)
在搭建完菜单以后,程序不报错也能运行,但是运行结果就是一个框,就跟没有搭建过菜单一样,如下图所示,没有我们想象中的菜单栏,更别说有下拉菜单了,但是如果将搭建菜单的代码单独放到一个测试类中去测试一下的话,会显示出来菜单,也就是说我们搭建菜单的核心代码是没有问题的
123 0
搭建完菜单后运行不显示菜单的原因及其解决方法(拼图小游戏)
|
算法 数据挖掘 Python
python 如何实现5°×5°的空间窗口滑动
近期,在处理数据分析资料时,需要对数据进行空间窗口滑动,统计每个窗口内数据的数目等信息。举个例子,对数据进行每5°为间隔的经纬度滑动,每次都是一个5×5的窗口。其实,对于空间窗口的滑动,无非是对经纬度数据进行循环读取。
推荐一个免费的屏幕取色器,鼠标放到的位置自动显示RGB
推荐一个免费的屏幕取色器,鼠标放到的位置自动显示RGB
297 0
推荐一个免费的屏幕取色器,鼠标放到的位置自动显示RGB