问题:

  给出四个数,不可以重复使用,可以用+ - * /和括号,怎么得出24?

代码:

  

     //return -1 表示当前方法不行
private int workByStep(int op,int num1,int num2)
{
int temp=-1;
if(op==0)
{
temp= num1+num2;
}else if(op==1)
{
temp=num1-num2;
}else if(op==2)
{
temp=num1*num2;
}else if(op==3)
{
temp=(int)(num1/num2);
}
//只要没有有小数生成,即使有负数也没问题,只要中的结果为24,却没有发生约数即可
if(num1%num2!=0&&op==3)
{
return -1;
}
return temp;
}
public int work(int num1,int num2,int num3,int num4)
{
//每一种确定好的数组顺序,一共有4*4*4=64种运算方法。
//遍历4中运算法则
//0 +
//1 -
//2 *
//3 /
int temp1=-1,temp2=-1,temp3=-1;
int count=0; //一共有多少种方法
for(int op1=0;op1<4;op1++)
{
temp1=workByStep(op1,num1,num2);
/*if(temp==-1)
{
System.out.println("continue");
continue;
}*/
for(int op2=0;op2<4;op2++)
{
temp2=workByStep(op2,temp1,num3);
/*if(temp==-1)
{
System.out.println("continue");
continue;
}*/
for(int op3=0;op3<4;op3++)
{
temp3=workByStep(op3,temp2,num4);
if(temp3==TOTAL)
{
count++;
System.out.println("计算方法为:"+
num1+" "+op1+" "+num2+" "+op2
+" "+num3+" "+op3+" "+num4+"="+TOTAL);
}
}
}
}
return count;
}
public void sortArray(int[] nums)
{
int count=0;
//一共有4*3*2*1=24中排序
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
for(int k=0;k<4;k++)
{
for(int l=0;l<4;l++)
{
if((j!=i)&&
(k!=i&&k!=j)&&
(l!=i&&l!=j&&l!=k))
{
//count++;
//System.out.println(nums[i]+" "+nums[j]+" "+nums[k]+" "+nums[l]);
work(nums[i],nums[j],nums[k],nums[l]);
}
}
}
}
}
//debug
//System.out.println("一共有"+count+"排序方法。");
}

大概思路:括号只是调整顺序,所以将四个数的每种排法和每两个数之间的运算都尝试,

一共有4*4*3*4*2*4*1=1536中情况,当然,很多情况执行第一步就可以知道不可能得到结果的了,可以进一步筛选。但是大概思路是这样的,也没有想出更好的方法。

二十四点算法 java实现的更多相关文章

  1. 《手把手教你》系列技巧篇(二十八)-java+ selenium自动化测试-处理模态对话框弹窗(详解教程)

    1.简介 在前边的文章中窗口句柄切换宏哥介绍了switchTo方法,这篇继续介绍switchTo中关于处理alert弹窗的问题.很多时候,我们进入一个网站,就会弹窗一个alert框,有些我们直接关闭, ...

  2. 《手把手教你》系列技巧篇(二十九)-java+ selenium自动化测试- Actions的相关操作上篇(详解教程)

    1.简介 有些测试场景或者事件,Selenium根本就没有直接提供方法去操作,而且也不可能把各种测试场景都全面覆盖提供方法去操作.比如:就像鼠标悬停,一般测试场景鼠标悬停分两种常见,一种是鼠标悬停在某 ...

  3. 《手把手教你》系列技巧篇(二十五)-java+ selenium自动化测试-FluentWait(详细教程)

    1.简介 其实今天介绍也讲解的也是一种等待的方法,有些童鞋或者小伙伴们会问宏哥,这也是一种等待方法,为什么不在上一篇文章中竹筒倒豆子一股脑的全部说完,反而又在这里单独写了一篇.那是因为这个比较重要,所 ...

  4. 201903-2 二十四点 Java

    思路: 数据结构中,栈可以解决运算的问题.利用压栈和弹栈操作实现(这里用队列模拟).具体的: 遇到乘除号,弹出栈顶元素,将计算结果压入栈中.遇到加减号,将后面的数一起压入栈中. 注意: substri ...

  5. 聊聊高并发(二十)解析java.util.concurrent各个组件(二) 12个原子变量相关类

    这篇说说java.util.concurrent.atomic包里的类,总共12个.网上有非常多文章解析这几个类.这里挑些重点说说. watermark/2/text/aHR0cDovL2Jsb2cu ...

  6. 转: 二十八、Java图形化界面设计——中间容器(Jpanel)

    http://blog.csdn.net/liujun13579/article/details/7762835 上一篇讲解了Jframe顶层容器,例子中生成了一个空的窗体,在实际编程过程中,一般很少 ...

  7. 【Java学习笔记之二十九】Java中的"equals"和"=="的用法及区别

    Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: String str1 = new String(" ...

  8. 二十四、JAVA的NIO和IO的区别

    一.JAVA的NIO和IO 1.NIO:面向缓冲区(buffer)(分为非阻塞模式IO和阻塞模式IO)组成部分:Channels管道,Buffers缓冲区,Selectors选择器 2.IO:面向流( ...

  9. Java学习笔记二十九:一个Java面向对象的小练习

    一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...

随机推荐

  1. Google 地图 API V3 针对移动设备进行开发

    Google官方教程: Google 地图 API V3 使用入门 Google 地图 API V3 针对移动设备进行开发 Google 地图 API V3 之事件 Google 地图 API V3 ...

  2. LoadRunner 函数之lr_xml_find

    实例如: char *xml_input = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>&qu ...

  3. Beanutils基本用法

    Beanutils用了魔术般的反射技术,实现了很多夸张有用的功能,都是C/C++时代不敢想的.无论谁的项目,始终一天都会用得上它.我算是后知后觉了,第一回看到它的时候居然错过. 1.属性的动态gett ...

  4. 第一次部署Struts2时出现错误java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.class

    报如下错误 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720) at org. ...

  5. tyvj1863 [Poetize I]黑魔法师之门

    背景 经过了16个工作日的紧张忙碌,未来的人类终于收集到了足够的能源.然而在与Violet星球的战争中,由于Z副官的愚蠢,地球的领袖applepi被邪恶的黑魔法师Vani囚禁在了Violet星球.为了 ...

  6. [Math] 常见的几种最优化方法

    我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题“在一定成本下,如何使利润最大化”等.最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素 ...

  7. php 301 重定向 转自http://www.icoa.cn/a/475.html

    内容简介 有时候我们的有多个域名指向同一个网站,或者我们更换了网站的网址,那么怎么样将原来网站的流量导入到新网址中呢,那么我们可以用301重定向的方式,而且这种方式是对搜索引擎比较友好的方式.如果首页 ...

  8. php万年历

    最近学习php循环.日期显示.GET方式请求,进而实现了一个小程序. 直接上代码: <?php header("Content-type:text/html; charset=UTF- ...

  9. C/C++ 结构体内存对齐

    内存对齐是指的是编译器在编译的时候总是会将结构体的元素的地址放在一些合适的位置使得CPU访问这些数据的效率变得更高.首先来看下面这个例子: struct A{ char a; char b; int ...

  10. (备忘)自定义viewgroup与点击分发事件

    public class ScoreButton extends ViewGroup 在类中重写onTouchEvent方法 @Override public boolean onTouchEvent ...