问题:

  给出四个数,不可以重复使用,可以用+ - * /和括号,怎么得出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. linux集群时钟问题

    一.ntpd与ntpdate的区别: 摘自:ntpd与ntpdate的区别 - 百事乐 - 博客园  http://www.cnblogs.com/liuyou/archive/2012/07/29/ ...

  2. MySql 杂记

    1:声明一个int变量时,设置它默认为0,而不是空或null. int 型,取值范围-2,147,483,648 到 2,147,483,647 ,默认值是 0 int是值类型,读内存区间中指定长度单 ...

  3. 深入理解javascript原型和闭包(17)——补this

    本文对<深入理解javascript原型和闭包(10)——this>一篇进行补充,原文链接:http://www.cnblogs.com/wangfupeng1988/p/3988422. ...

  4. Bash 会清空从父进程继承来的 OLDPWD

    即便 Bash 没有从父进程继承任何的环境变量,Bash 自己也会创建三个环境变量,分别是: $ env -i bash -c export declare -x OLDPWD declare -x ...

  5. JavaScript getComputedStyle

    我们使用 element.style 也可以获取元素的CSS样式声明对象,但是其与 getComputedStyle 方法还是有一些差异的. 首先,element.style 是可读可写的,而 get ...

  6. [Centos] Centos 7笔记

    命令行与图形界面 在X-Window图形操作界面中按“Alt+Ctrl+功能键Fnn=1~6”就可以进入Console字符操作界面.这就意味着你可以同时拥有X-Window加上6个Console字 ...

  7. 【强烈推荐】如何给TortoiseGit 配置密钥?

    TortoiseGit 使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥.也就是说使用 ssh-keygen -C "username@email.com" - ...

  8. 【Android学习】android布局中几个距离单位的区别:px、dp、sp

    一.px 像素,我们经常说的400*800这种的就是像素,这个比较好理解. 二.dp 要理解dp,首先要先引入dpi这个概念,dpi全称是dots per inch,对角线每英寸的像素点的个数,所以, ...

  9. javascript中的冒泡排序

    冒泡排序:就是将一个数组中的元素按照从大到小或者从小到大的顺序进行排列. var array=[9,8,7,6,5,4,3,2,1]; 第一轮比较:8,7,6,5,4,3,2,1,9      交换了 ...

  10. JS中的call()和apply()方法

    1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...