问题:

  给出四个数,不可以重复使用,可以用+ - * /和括号,怎么得出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. OpenGL Common Mistakes

    https://www.opengl.org/wiki/Common_Mistakes Do not use constructors/destructors to initialize/destro ...

  2. CentOS6.3搭建Nginx代理访问MongoDB GridFS图片资源

    PHP可以直接读取MongoDB GridFS中的图片并显示到页面中,但对PHP的压力就大了.偶然机会,了解到Nginx可以代理访问,实现过程如下: 1.工具准备 安装一些必要的编译工具及库,这里是直 ...

  3. javascript基础04

    javascript基础04 1.循环语句 1.While 语句: while (exp) { //statements; } var i = 1; while(i < 3){ alert(i) ...

  4. Maven 入门 (1)—— 安装

    Maven 入门 (1)—— 安装 http://blog.csdn.net/kakashi8841/article/details/17371837 1.下载maven安装包 http://mave ...

  5. 探讨兼容IE低版本的PC端响应式布局

    http://www.jiangweishan.com/article/lowIeResposive.html 响应式布局,oh my god!!有点醉了,感觉是老生常谈的话题了.虽然已经谈过很多了, ...

  6. IEnumerable和IEnumerable<T>接口

    IEnumerable和IEnumerable<T>接口 IEnumerable和IEnumerable<T>接口在.NET中是非常重要的接口,它允许开发人员定义foreach ...

  7. RobotFrameWork(三)数据类型

    1.1 数字变量 执行结果: 1.2 布尔变量和None/null 执行结果: 1.3 字符串.元组.list和字典 执行结果: 1.4 space和empty 执行结果:

  8. ABAP 读取销售订单抬头文本自建函数

    FORM frm_read_txt USING vbeln LIKE vbak-vbeln                   CHANGING txt . DATA :lc_name         ...

  9. 两个已排序数组进行合并后的第K大的值--进军硅谷

    我看到此题时,首先想到一个一个比较遍历过去,这是最暴力的方法,后面我想到了已经排序,那么对每个数组进行二分,然后比较这两个值.此书第三种解法,挺不错,只对那个长度较小的数组进行二分查找,保证i+j-1 ...

  10. textarea输入回车,前台jsp不回车问题解决

    jsp引入标签: <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"% ...