华为机试—24点游戏

import java.util.Scanner;

public class dian24 {

    public boolean isresult(String s) {
        int tmp = 0;// 判断每位的值
        int pre = 0;// 0+ 1- 2* 3/
        int num = 0;// 存放计算结果
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == ‘1‘ && s.charAt(i + 1) == ‘0‘) {
                tmp = 10;
                i++;
            } else if (s.charAt(i) >= ‘1‘ && s.charAt(i) <= ‘9‘) {
                tmp = s.charAt(i) - ‘0‘;
            } else {
                if (pre == 0)
                    num = num + tmp;
                else if (pre == 1)
                    num = num - tmp;
                else if (pre == 2)
                    num = num * tmp;
                else if (pre == 3)
                    num = num / tmp;
                tmp = 0;
                if (s.charAt(i) == ‘+‘)
                    pre = 0;
                else if (s.charAt(i) == ‘-‘)
                    pre = 1;
                else if (s.charAt(i) == ‘*‘)
                    pre = 2;
                else if (s.charAt(i) == ‘/‘)
                    pre = 3;
            }
        }
        if (pre == 0) {
            num = num + tmp;
        } else if (pre == 1) {
            num = num - tmp;
        } else if (pre == 2) {
            num = num * tmp;
        } else if (pre == 3) {
            num = num / tmp;
        }
        if (num == 24) {
            System.out.println(s);
            return true;
        } else
            return false;
    }

    public static void main(String[] args) {

        dian24 dian = new dian24();
        Scanner s = new Scanner(System.in);

        int count = 0;
        int ans = 0;
        int[] num = new int[4];
        for (int i = 0; i < num.length; i++) {
            num[count++] = s.nextInt();
        }

        String[] symbol = { "+", "-", "*", "/" };

        for (int a = 0; a < 4; a++) {
            for (int b = 0; b < 4; b++) {
                for (int c = 0; c < 4; c++) {
                    StringBuilder sb = new StringBuilder();
                    sb.insert(0, num[0]);
                    sb.insert(sb.length(), symbol[a]);
                    sb.insert(sb.length(), num[1]);
                    sb.insert(sb.length(), symbol[b]);
                    sb.insert(sb.length(), num[2]);
                    sb.insert(sb.length(), symbol[c]);
                    sb.insert(sb.length(), num[3]);

                    if (dian.isresult(sb.toString())) {
                        ans++;
                    }
                }
            }
        }

        if (ans > 0) {
            System.out.println("True");
        } else {
            System.out.println("False");
        }
    }

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 20:18:41

华为机试—24点游戏的相关文章

华为机试—掷骰子游戏

在掷骰子游戏中,会根据所掷数字在地图中前进几步,前进完成后需要根据当前地图位置所示的障碍进行相应操作,其中障碍表示: 1)9:无障碍 2)1:停掷一轮,即下轮所掷数字无效: 3)2:后退两步,如果已经到起点不再后退: 4)3:奖励前进一步 如果在游戏过程中,已经走到地图终点,则游戏结束.根据输入的地图数组,和5个骰子数的数组,返回最终玩家前进了多少步. 示例 1)输入:map_len = 15, map = {9,1,9,9,9,2,9,9,9,9,9,9,9,9,9},dice_val = {

华为机试—取石子游戏(高级题160分)

Problem Description 1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍.取完者胜.先取者负输出"Secondwin".先取者胜输出"Firstwin". Input 输入有多组.每组第1行是2<=n<2^31.n=0退出. Output 先取者负输出"Secondwin". 先取者胜输出"Firstwin". 参看Sample Ou

华为机试在线训练(4)

华为机试在线训练:字符串分隔 题目描述 ?连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:?长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100) 输出描述: 输出到长度为8的新字符串数组 输入例子: abc123456789 输出例子: abc000001234567890000000 代码: 1 import java.util.Arrays; 2 import java.util.Scanner; 3

[华为机试真题][2014]64.实现两个合法时间相加

题目 描述: 给定两个合法的时间(格式固定:hh:mm:ss,时间合法,不用考虑其它情况),输入两个时间相加后的结果:注意,相加后的结果也必需是一个合法的时间: 附合法时间定义:小时在[00-23]之间,分钟和秒分别是在[00-59]之间: 运行时间限制: 无限制 内存限制: 无限制 输入: 时分秒格式的时间字符串,如00:00:00 输出: 时分秒格式的时间字符串,如00:00:00 样例输入: 00:00:00 00:00:01 样例输出: 00:00:01 答案提示: 建议将时间转换为秒数

[华为机试真题]66.单词搜索

题目 代码 /*--------------------------------------- * 日期:2015-07-06 * 作者:SJF0115 * 题目:WordSearch * 来源:华为机试真题 -----------------------------------------*/ #include <iostream> #include <string> #include <vector> #include <stack> #include

华为机试正式版(西安c/c++/java),今天下午去机试的题目,新鲜出炉了!

以下题目都是回忆的,题目都很简单, 大家有些基础就可以参加!(语言可以是c/c++,也可以是java的) 题目一(60分): 字符串操作, 将小写转换成大写, 将大写转化为小写, 数字的不做转换 例如, 输入:aBcD12 输出:AbCd12 题目二(100分): 将输入的字符串按照规定重新排序,如果字符串长度为奇数, 则中间的字符保持不变, 中间字符左侧降序排列, 右侧字符按照升序排列, 如果字符串长度为偶数,则左半侧字符降序排列,右半侧字符则按照升序排列 例如, 输入:ab5de 输出:ba

华为机试 --- 求最大三位数

题目:输入10位0-9数字,取其中三位不同数字组合,求组合出来的最大三位数. 如输入 1 2 3 4 5 6 7 8 9 0,组合出来987最大. 测试代码如下: #include <stdio.h> #include <stdlib.h> int IsSame(int *a, int num); int main() { int i=0; int j=0; int a[10]={0}; int input =0; int length =0; int temp=0; for (i

[华为机试真题][2015]65.和尚挑水

题目 某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表: 和尚1: 星期二,四; 和尚2: 星期一,六; 和尚3: 星期三,日; 和尚4: 星期五; 和尚5: 星期一,四,六; 和尚6: 星期二,五; 和尚7: 星期三,六,日; 请将所有合理的挑水时间安排表 思路 回朔法求解 回朔法即每进行一步,都试图在当前部分解的基础上扩大该部分解.扩大时,首先检查扩大后是否违反了约束条件,若不违反,则扩大之,然后继续在此基础上按照类似的方法进行,直至成为完整解:若违反,则放弃该步

2014华为机试西安地区B组试题

2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着. 注:电灯数和学生