加减乘除24算法

package xiaosuanfa;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Cacul24 {
    public static Set<String> set;
    public static void main(String[] args) {
        
        double [] nums= {11,6,13,13};//在此输入四个数字
        set=new HashSet<String>();
        cacul(nums[0],nums[1],nums[2],nums[3],"");
        Iterator<String> iterator=set.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
    private static void cacul(double a, double b, double c, double d,String str) {
        if(b==0){
            if(a>23.999&&a<24.001){
                if(str.contains(",")){
                    str=str.replace(",", "-");
                }
                set.add(str);
            }
        }else if(c==0){
            String str2=str;
            for(int i=0;i<6;i++){
                if(str.contains(",")){
                    String strs []= str2.split(",");
                    str=calSign(strs[0],i,strs[1]);
                }else{
                    str=calSign((int)a+"",i,str2);
                }
                cacul(cacul(a,b,i),0,0,0,str);
                str=str2;
            }
        }else if(d==0){
            String str2=str;
            for(int i=0;i<6;i++){
                str=str2+","+calSign((int)a+"",i,""+(int)b);
                cacul(c,cacul(a,b,i),0,0,str);
                str=str2;
            }
            for(int i=0;i<6;i++){
                str=calSign((int)a+"",i,str2);
                cacul(b,cacul(a,c,i),0,0,str);
                str=str2;
            }
            for(int i=0;i<6;i++){
                str=calSign((int)b+"",i,str2);
                cacul(a,cacul(b,c,i),0,0,str);
                str=str2;
            }
        }else{
            for(int i=0;i<6;i++){
                str=calSign((int)a+"",i,""+(int)b);
                cacul(c,d,cacul(a,b,i),0,str);
            }
            for(int i=0;i<6;i++){
                str=calSign((int)a+"",i,""+(int)c);
                cacul(b,d,cacul(a,c,i),0,str);
            }
            for(int i=0;i<6;i++){
                str=calSign((int)b+"",i,""+(int)c);
                cacul(a,d,cacul(b,c,i),0,str);
            }for(int i=0;i<6;i++){
                str=calSign((int)a+"",i,""+(int)d);
                cacul(b,c,cacul(a,d,i),0,str);
            }
            for(int i=0;i<6;i++){
                str=calSign((int)b+"",i,""+(int)d);
                cacul(a,c,cacul(b,d,i),0,str);
            }
            for(int i=0;i<6;i++){
                str=calSign((int)c+"",i,""+(int)d);
                cacul(a,b,cacul(c,d,i),0,str);
                
            }
        }
    }

private static String calSign( String a, int type, String b) {
        switch(type){
        case 0 :return "("+a+"+"+b+")";
        case 1 :return "("+a+"-"+b+")";
        case 2 :return a+"*"+b;
        case 3 :return a+"/"+b;
        case 4 :return "("+b+"-"+a+")";
        case 5 :return b+"/"+a;
        
    }
        return null;
    }

private static double cacul(double a, double b,int type) {
        switch(type){
            case 0 :return a+b;
            case 1 :return a-b;
            case 2 :return a*b;
            case 3 :return a/b;
            case 4 :return b-a;
            case 5 :return b/a;
        }
        return 0;
    }

}

时间: 2024-10-08 01:39:11

加减乘除24算法的相关文章

【算法29】速算24

问题描述 题目来源:PAT ds 2-08 给定四个数字a, b, c, d,取值范围为[1, 13]:添加合适的运算符 + , - , * , /, 和括号(, )使得表达式等于24,给出一种可能的表达式方案:如果不可能则返回-1. 例如:输入2, 3, 12, 12, 输出 ((3-2)*12) + 12. 输入5, 5, 5, 2, 输出-1. 问题分析 这个题目似乎没有好的算法,只能暴力搜索. 首先对于所有给个数字进行全排列,总过有$A_4^4 = 24$中排列方式: 然后对于每一种排列

一个简单的加减乘除自动生成小程序升级版(JAVA)

1 import java.util.Scanner; 2 public class Suan { 3 public static void main(String[] args) { 4 int []b;//设置数组来存放随机产生数 5 b=new int [4]; 6 Scanner in=new Scanner(System.in); 7 System.out.println("请选择你想练习的题型:"); 8 System.out.println(" 1.分数的加减乘

删除给定字符的算法

面试中,面试官问我现场写的一个算法题目:给定一个字符串和一个字符,删除字符串中包含和此字符相同的字符. 算法1: 1 #include<stdio.h> 2 3 void delChar(char * str, char p){ 4 int i = 0; 5 int j = 0; 6 while(str[j] != NULL){ 7 if(str[j] == p) 8 j++; 9 else{ 10 str[i] = str[j]; 11 i++; 12 j++; 13 } 14 } 15 s

《算法帝国》

<算法帝国> 基本信息 原书名:Automate this:how algorithms came to rule our world? 作者: (美)克里斯托弗.斯坦纳 译者: 李筱莹 出版社:人民邮电出版社 ISBN:9787115349002 上架时间:2014-5-15 出版日期:2014 年6月 开本:16开 页码:215 版次:1-1 所属分类:计算机 > 计算机科学理论与基础知识 > 计算理论 > 算法 更多关于>>><算法帝国>

前端工程师算法(一)

算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指定,算法代表着用系统的方法描述解决问题的策略机制.这个解释来源于百度,对于入门来说这个解释等于白说了,你的一脸懵逼我懂,大神略过. 说人话 算法 你需要了解的算法是什么? 开始了解算法就应该对程序有一些认识和理解了,其实我们所有的程序可以理解为算法加数据结构.撇开数据结构不谈,我们日常写的代码如if-else.for(...)等就是算法.在数学里加减乘除是算法,方程公式,几何公式,乃至高数也都是算法,而我们的if-else.for(..

设计模式——简单工厂模式

定义: 简单工厂模式是一个由工厂来确定创建某种产品的实例. 先看一个简单的例子 package com.zr.pattern.simpleFactory; import java.util.Scanner; /** * 实现计算机控制台程序,要求输入两个数和运算符得到运算结果 * @author zr */ public class Calculator { public static void main(String[] args) { Scanner scanner = new Scanne

python的基础2和3的区别,以及for和while的循环

1.python2\python3的区别:python2\python3的区别:一.代码重复,python2代码重复功能复用,夹杂其他语言的部分,不规范python3进行整合,简洁优美编译型:一次性将全部代码编译成二进制,然后再运行.缺点:开发效率低,不能跨平台 解释型:程序开始执行时,将代码一行一行解释成二进制,执行.缺点:开发效率低 python有点:1.开发效率高,由第三方库直接调用,比如php接不可以了2.可移植性3.可扩展.可嵌入性高:加入c语言速度执行快 python的种类:cpyt

每周学习

这是开学后的第二周,这一周我我复习了C++以前的知识,程序算法.结构等.通过复习还真的明白了好多以前不懂得东西,让我对C++有了进一步的了解. 这一周我用了2节课时间主要的练习了加减乘除综合算法的程序,在编写程序的过程中发现了自己许多的不足,虽然知道怎么编写,但是对于语言的结构还不够熟悉,要通过查书才能编写成功,这说明了我对C++还不够熟练,掌握的程度还不够深刻,我还需要继续努力,达到熟练的程度.

设计模式--简单工厂应用 java

要实现java面向对象,那么我们来写个简单的工厂来实现java的封装.继承.复用的例子,还有,我们顺便实现函数式的简单工厂. 一.简单工厂(非函数式) 1.首先我们将通用的属性合方法放在一个普通类里边 /** * Created by LK on 2016/5/8. */ public class Operation { private double numberA = 0; private double numberB = 0; public double getNumberA() { ret