代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
计算24点
作者:
ZaneYoung
/ 发布于
2014/5/20
/
505
package net.yunstudio.p24.util; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Random; import java.util.Set; public class Count24 { private List<String> answerList=new ArrayList<String>(); public List<String> getAnswerList() { return answerList; } public static class Data{ public float[] arr; public String expStr=""; public String[] strs;//保存每个结果对应的表达式 public Data(){} public Data(int a,int b,int c,int d) { arr=new float[]{a,b,c,d}; strs=new String[]{a+"",b+"",c+"",d+""}; expStr=a+""; } public Data(int arr[]) { this.arr=new float[]{arr[0],arr[1],arr[2],arr[3]}; this.strs=new String[]{arr[0]+"",arr[1]+"",arr[2]+"",arr[3]+""}; } } public void count(Data data){ float[] arr=data.arr; if(arr.length<=1){//判断是否得到24点,得到的就保存算式字符串 if(arr.length==1&&arr[0]==24){ answerList.add(data.expStr.substring(1, data.expStr.length()-1)); } return ; } //循环遍历数组中任意两个不相同的数,对这两个数进行计算,然后把各个计算结果保存到第二个数里面,计算的算式保存在第二个数对应的字符串里。第一个数在copy的心数组中被丢弃 for(int i=0,len=arr.length;i<len-1; i++){ for(int j=i+1;j<len;j++){ float x=arr[i]; float y=arr[j]; String xs=data.strs[i]; String ys=data.strs[j]; for(int k=0;k<6;k++){ Data newData=getNewArr(data,i); switch(k){ case 0: newData.arr[j-1]=x+y; newData.expStr=xs+"+"+ys; break; case 1: newData.arr[j-1]=x-y; newData.expStr=xs+"-"+ys; break; case 2: newData.arr[j-1]=y-x; newData.expStr=ys+"-"+xs; break; case 3: newData.arr[j-1]=x*y; newData.expStr=xs+"*"+ys; break; case 4: if(y!=0){ newData.arr[j-1]=x/y; newData.expStr=xs+"/"+ys; }else { continue; } break; case 5: if(x!=0){ newData.arr[j-1]=y/x; newData.expStr=ys+"/"+xs; }else { continue; } break; } newData.expStr="("+newData.expStr+")"; newData.strs[j-1]=newData.expStr; count(newData); } } } } private static Data getNewArr(Data data, int i) { Data newData=new Data(); newData.expStr=data.expStr; newData.arr=new float[data.arr.length-1]; newData.strs=new String[data.arr.length-1]; for(int m=0,len=data.arr.length,n=0;m<len;m++){ if(m!=i){ newData.arr[n]=data.arr[m]; newData.strs[n]=data.strs[m]; n++; } } return newData; } public static final List<String> easyCount(int[] curRandNums){ Count24 count24=new Count24(); count24.count(new Data(curRandNums)); Set<String> set=new HashSet<String>(count24.getAnswerList());//去重 return new ArrayList<String>(set); } public static void main(String[] args) throws InterruptedException { long start=System.currentTimeMillis(); Data d=new Data(1,2,3,4); count(d); System.out.println(System.currentTimeMillis()-start); } }
试试其它关键字
24点
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
ZaneYoung
贡献的其它代码
(
2
)
.
兼容chrome,ie8+的控制台日志类
.
计算24点
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3