看之前大学写过的24点程序中用到的核心计算算法——计算四个值能否计算出24,当时用的c++写的,现用Java重写一遍

程序实现了多个数值(可重复),每个数值只能运算一次,二元运算的条件下获得所有结果集

import java.util.ArrayList;
import java.util.Arrays; public class point24 { public static void main(String[] args){
float[] calcList = {2,3,4,5};
calc24(calcList);
}
//实现n个数值运算化解为多个n-1数值运算,用递归思想在计算到单个数值的时候递归结束
static void calc24(float[] calcList){
if(calcList.length == 1) {//递归出口
System.out.println(calcList[0]);
}
else {
//双层循环遍历所有当前数组任意两个数进行运算,得到结果与没有进行运算的数值进行下一次运算
for (int i = 0; i < calcList.length; i++) {
for (int j = i+1; j < calcList.length; j++) {
float temp1 = calcList[i];
float temp2 = calcList[j];
ArrayList<Float> resultListFor2Nums = calcFor2Nums(temp1, temp2);
for (int n = 0; n < resultListFor2Nums.size(); n++) {
float[] nextCalList = calcList;
//删除掉数组中第i个值,并把第j个值替换成这两个值的运算结果
nextCalList[j] = nextCalList[nextCalList.length-1];
nextCalList = Arrays.copyOf(nextCalList,nextCalList.length-1);
nextCalList[i] = resultListFor2Nums.get(n); calc24(nextCalList); //递归在这
}
} }
}
}
//计算两个值在可以使用+-*/操作时可以得到的所有结果,可以扩展或者减少运算集
static ArrayList<Float> calcFor2Nums(float a,float b){
ArrayList<Float> resultList = new ArrayList<>();
resultList.add(a + b);
resultList.add(a - b);
resultList.add(a * b);
resultList.add(a / b);
resultList.add(b - a);
resultList.add(b / a);
return resultList;
} }

  

Java生成多数值二元运算结果集的更多相关文章

  1. 【转】Java生成对应字符串的MD5密码模块

    原文网址:http://www.cnblogs.com/xudong-bupt/archive/2013/05/10/3070899.html (1)一般使用的数据库中都会保存用户名和密码,其中密码不 ...

  2. Java生成MD5加密字符串代码实例

    这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下   (1)一般使用的数据库中都会保存用 ...

  3. Java用户输入数值,做简单的猜数字游戏,导入基础的工具包util

    Java用户输入数值,做简单的猜数字游戏,导入基础的工具包util,导入包的方法为,import java.util.*: 完整的实例代码: /* 导入基础工具包 */ import java.uti ...

  4. java 生成二维码、可带LOGO、可去白边

      1.准备工作 所需jar包: JDK 1.6: commons-codec-1.11.jar core-2.2.jar javase-2.2.jar JDK 1.7: commons-codec- ...

  5. java图片裁剪和java生成缩略图

    一.缩略图 在浏览相冊的时候.可能须要生成相应的缩略图. 直接上代码: public class ImageUtil { private Logger log = LoggerFactory.getL ...

  6. Java陷阱一箩筐----面试题集及解答

    Java陷阱一箩筐----面试题集及解答 面试是没什么道理可讲的,它的题目有的不合情理.脱离实际.有在纸上写的,有当面考你的,也有在电话里问的,给你IDE的估计很少. 当然这些都是Java的基本题,那 ...

  7. Java生成和操作Excel文件(转载)

    Java生成和操作Excel文件   JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...

  8. 利用JAVA生成二维码

    本文章整理于慕课网的学习视频<JAVA生成二维码>,如果想看视频内容请移步慕课网. 维基百科上对于二维码的解释. 二维条码是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图 ...

  9. Java生成验证码原理(jsp)

     验证码的作用: 验证码是Completely Automated Public Turing test to tell Computers and Humans Apart(全自动区分计算机和人类的 ...

随机推荐

  1. mysql 修改字段

    alter table dev_instant_video modify column content varchar(2500)alter table dev_instant_video_info  ...

  2. linux 硬盘挂载

    #df -h(查看分区情况及数据盘名称) # mkdir /data(如果没有data目录就创建,否则此步跳过) # umount /home(卸载硬盘已挂载的home目录) # mount /dev ...

  3. 浅谈左偏树在OI中的应用

    Preface 可并堆,一个听起来很NB的数据结构,实际上比一般的堆就多了一个合并的操作. 考虑一般的堆合并时,当我们合并时只能暴力把一个堆里的元素一个一个插入另一个堆里,这样复杂度将达到\(\log ...

  4. 【php增删改查实例】第十七节 - 用户登录(1)

    新建一个login文件,里面存放的就是用户登录的模块. <html> <head> <meta charset="utf-8"> <sty ...

  5. 校内模拟赛 SovietPower Play With Amstar

    SovietPower Play With Amstar 题意: 一棵二叉树,每次询问一条路径上的路径和,初始每个点有一个权值1,询问后权值变为0.$n \leq 10^7,m\leq10^6$ 分析 ...

  6. [JSOI2016]病毒感染[dp]

    题意 有 \(n​\) 个村庄按标号排列,每个村庄有一个死亡速度 \(a_i​\) 表示每天死 \(a_i​\) 人(除非你治好这个村庄). 你从 1 号村庄出发,每天可以选择向相邻的村庄进发或者治愈 ...

  7. Facebook React 和 Web Components(Polymer)对比优势和劣势

    目录结构 译者前言 Native vs. Compiled 原生语言对决预编译语言 Internal vs. External DSLs 内部与外部 DSLs 的对决 Types of DSLs - ...

  8. Unity接入Steamworks

    一.将scrpts/Steamworks.net/SteamManager组件添加到游戏物体上 二.修改SteamManager的代码为游戏的id如图所示 三.Unity,打开项目根目录,修改stea ...

  9. Jquery获取和修改img的src值的方法

    转自:http://www.jb51.net/article/46861.htm 获取(代码): $("#imgId")[0].src; 修改(代码): $("#imgI ...

  10. android 活动的生命周期

    掌握活动的生命周期非常重要,因为一个正常的android应用,会有很多的活动,如何在这些活动之间进行切换.数据的交互等,就经常会用到活动的生命周期这一块的知识.可以说,只要掌握了活动的生命周期,才能更 ...