zoukankan      html  css  js  c++  java
  • 24点游戏算法

    描述

    问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利
    输入:
    4个1-10的数字。[数字允许重复,测试用例保证无异常数字]
    输出:
    true or false

    知识点 循环
    运行时间限制 10M
    内存限制 128
    输入

    输入4个int整数

    输出

    返回能否得到24点,能输出true,不能输出false

    样例输入 7 2 1 10
    样例输出 true
    package com.oj5;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    public class Oj {
    	private static int calculate(int[] operator,int[] data){
    		int[] op = new int[3];
    		int[] da = new int[4];
    		int oppos = 0,dapos = 0;
    		int posop = 0,posda = 0;
    		da[dapos++] = data[posda++];
    		for(int i = 0;i <= 2; i++)
    			if(operator[i]==1||operator[i]==2){
    				da[dapos++] = data[posda++];
    				op[oppos++] = operator[i];
    				//System.out.println("add");
    			}else if(operator[i]==3||operator[i]==4){
    				int left = da[--dapos];
    				int right = data[posda++];
    				int result;
    				if(operator[i]==3)
    					result = left*right;
    				else
    					result = left/right;
    				da[dapos++] = result;
    				//System.out.println(result);
    			}
    		int begin = 0;
    		int result = da[begin++];
    		//System.out.println("oppos: "+oppos);
    //		if(oppos==1)
    //			System.out.println(op[0]);
    		for(int i = 0;i < oppos; i++)
    			if(op[i]==1){
    				//System.out.println(result+" ++");
    				result += da[begin++];
    				//System.out.println(result);
    			}else if(op[i]==2){
    				//System.out.println(result+" --");
    				result -= da[begin++];
    				//System.out.println(result);
    			}
    		//System.out.println(op[0]);
    		return result;
    //		if(result==24)
    //			return true;
    //		else
    //			return false;
    	}
    	static List<Integer> list = new ArrayList<Integer>();
    	private static void expression(int[] operator,int pos,int num,int[] data){
    		if(pos==num){
    			list.add(calculate(operator,data));
    			return ;
    		}
    		
    		operator[pos] = 1;
    		expression(operator,pos+1,num,data);
    		operator[pos] = 2;
    		expression(operator,pos+1,num,data);
    		operator[pos] = 3;
    		expression(operator,pos+1,num,data);
    		operator[pos] = 4;
    		expression(operator,pos+1,num,data);
    	}
    	
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		int[] data = new int[4];
    		int[] operator = new int[3];
    		for(int i = 0;i < 4; i++)
    			data[i] = in.nextInt();
    		
    		expression(operator,0,3,data);
    		for(int i = 0;i < list.size(); i++)
    			if(list.get(i)==24){
    				System.out.println("true");
    				return ;
    			}
    		System.out.println("false");
    	}
    }
    

      

  • 相关阅读:
    spring——依赖注入
    jsp课程笔记(一)
    spring入门程序(一)
    关于java项目导入到eclipse无法访问的问题
    lnmp一键下载及安装
    spring配置文件application.Context配置文件的约束信息快速获取
    Tomcat下载与安装
    Nginx配置java项目在Tomcat下访问
    webstrom快捷键合集
    Ubuntu 开启SSH服务以及有关设置:安装,指定端口号、免密登录、远程拷贝
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/5397139.html
Copyright © 2011-2022 走看看