华为 2033 24点游戏算法
2015-04-24 00:48
363 查看
24点游戏算法 | 答题时间: 00 小时 00 分 05 秒 |
描述: | 问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利 输入: 4个1-10的数字。[数字允许重复,测试用例保证无异常数字] 输出: true or false |
知识点: | 循环 |
题目来源: | 内部整理 |
练习阶段: | 初级 |
运行时间限制: | 10Sec |
内存限制: | 128MByte |
输入: | 输入4个int整数 |
输出: | 返回能否得到24点,能输出true,不能输出false |
样例输入: | 7 2 1 10 |
样例输出: | true |
答案提示: |
package HW基础题; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; import java.util.Stack; public class HW2033 { static String operator[] = { "+","-","*","/" }; static String num[] =new String[8];//= { ' ', '1', ' ', '2', ' ', '3', ' ', '4', ' ', '5', //' ', '6', ' ', '7', ' ', '8', ' ', '9' }; static int X = 0; static int count = 0; /** * 将字符串转化成List * @param str * @return */ public static ArrayList<String> getStringList(String str){ ArrayList<String> result = new ArrayList<String>(); String num = ""; for (int i = 0; i < str.length(); i++) { if(Character.isDigit(str.charAt(i))){ num = num + str.charAt(i); }else{ if(num != ""){ result.add(num); } result.add(str.charAt(i) + ""); num = ""; } } if(num != ""){ result.add(num); } return result; } /** * 将中缀表达式转化为后缀表达式 * @param inOrderList * @return */ public static ArrayList<String> getPostOrder(ArrayList<String> inOrderList){ ArrayList<String> result = new ArrayList<String>(); Stack<String> stack = new Stack<String>(); for (int i = 0; i < inOrderList.size(); i++) { if(Character.isDigit(inOrderList.get(i).charAt(0))){ result.add(inOrderList.get(i)); }else{ switch (inOrderList.get(i).charAt(0)) { case '(': stack.push(inOrderList.get(i)); break; case ')': while (!stack.peek().equals("(")) { result.add(stack.pop()); } stack.pop(); break; default: while (!stack.isEmpty() && compare(stack.peek(), inOrderList.get(i))){ result.add(stack.pop()); } stack.push(inOrderList.get(i)); break; } } } while(!stack.isEmpty()){ result.add(stack.pop()); } return result; } /** * 计算后缀表达式 * @param postOrder * @return */ public static Integer calculate(ArrayList<String> postOrder){ Stack stack = new Stack(); for (int i = 0; i < postOrder.size(); i++) { if(Character.isDigit(postOrder.get(i).charAt(0))){ stack.push(Integer.parseInt(postOrder.get(i))); }else{ Integer back = (Integer)stack.pop(); Integer front = (Integer)stack.pop(); Integer res = 0; switch (postOrder.get(i).charAt(0)) { case '+': res = front + back; break; case '-': res = front - back; break; case '*': res = front * back; break; case '/': res = front / back; break; } stack.push(res); } } return (Integer)stack.pop(); } /** * 比较运算符等级 * @param peek * @param cur * @return */ public static boolean compare(String peek, String cur){ if("*".equals(peek) && ("/".equals(cur) || "*".equals(cur) ||"+".equals(cur) ||"-".equals(cur))){ return true; }else if("/".equals(peek) && ("/".equals(cur) || "*".equals(cur) ||"+".equals(cur) ||"-".equals(cur))){ return true; }else if("+".equals(peek) && ("+".equals(cur) || "-".equals(cur))){ return true; }else if("-".equals(peek) && ("+".equals(cur) || "-".equals(cur))){ return true; } return false; } public static void search(int flag, int op) { num[flag * 2] = operator[op]; if (flag == 3) { StringBuffer express=new StringBuffer(); for(int i=1;i<8;i++) express.append(num[i]); //System.out.println(express); String s=new String(express); //System.out.println(s); ArrayList result = getStringList(s); result = getPostOrder(result); //中缀变后缀 int temp = calculate(result); //计算 if (temp == X) { count++; System.out.println(s);//输出所有表达式值=24的组合 //System.out.println(Arrays.toString(num));//输出所有表达式值=24的组合 } return; } search(flag + 1, 0); search(flag + 1, 1); search(flag + 1, 2); search(flag + 1, 3); } public static void main(String[] args) { Scanner sca = new Scanner(System.in); X = 24; for(int i=0;i<8;i=i+2){ num[i]=""; num[i+1]=String.valueOf(sca.nextInt()); } //System.out.println(Arrays.toString(num)); search(0, 0); if(count>0) System.out.print("true"); else System.out.print("false"); } }
相关文章推荐
- [华为机试练习题]44.24点游戏算法
- 华为oj初级 24点游戏算法
- 华为OJ——24点游戏算法
- 24点游戏算法-华为OJ
- 华为OJ:24点游戏算法
- 24点游戏算法-华为OJ
- 【华为OJ】【097-24点游戏算法】
- [华为OJ--C++]097-24点游戏算法
- 华为OJ——24点游戏算法
- 华为机试:计算字符串的距离、24点游戏算法
- 华为oj 24点游戏算法
- 华为OJ24点游戏算法
- 华为OJ 初级:24点游戏算法
- 华为oj_24点游戏算法
- 相当棒的24点游戏算法,Javascript写的,不懂,谁能翻译成C/C++?
- 华为OJ(扑克牌之24点游戏)
- 24点游戏算法
- 华为机试题--24点游戏--In Java
- 24点游戏的算法
- 24点游戏的算法