[OJ]24点游戏之递归实现(JAVA)

来源:互联网 发布:sql注入绕过空格 编辑:程序博客网 时间:2024/05/22 15:42

题目描述

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

true or false

输入描述:
输入4个int整数
输出描述:
返回能否得到24点,能输出true,不能输出false
输入例子:

7 2 1 10

输出例子:

true

下面为笔者给出的JAVA实现。

import java.util.Arrays;import java.util.Scanner;public class Main {    static boolean isTrue = false;    static void cal(int[] num, int flag, double sum) {        if (flag == 3) {            if (sum == 24) {                // System.out.println("true");                isTrue = true;            }            return;        }        if (!isTrue) {            flag++;            cal(num, flag, sum + num[flag]);            cal(num, flag, sum - num[flag]);            cal(num, flag, sum * num[flag]);            cal(num, flag, sum / num[flag]);        }    }    public static void quanpaixu(int[] a) {        // 检查排序是够完成        boolean wancheng = true;        while (wancheng) {            wancheng = false;            for (int i = 0; i < 3; i++) {                if (a[i] < a[i + 1]) {                    wancheng = true;                    break;                }            }            if (!wancheng)                break;            // qiu j            int j = 0;            for (int i = 2; i >= 0; i--) {                if (a[i] < a[i + 1]) {                    j = i;                    break;                }            }            // 求k            int min = 11;            int k = 0;            for (int www = j + 1; www < 4; www++) {                if (min > a[www] && a[www] > a[j]) {                    min = a[www];                    k = www;                }            }            // 交换k,j            int temp = a[k];            a[k] = a[j];            a[j] = temp;            for (int www = 0; www < (4 - j - 1) / 2; www++) {                temp = a[j + 1 + www];                a[j + 1 + www] = a[4 - www - 1];                a[3 - www] = temp;            }            cal(a, 0, 0);        }    }    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int[] a = new int[4];        while (scanner.hasNext()) {            for (int i = 0; i < 4; i++) {                a[i] = scanner.nextInt();            }            Arrays.sort(a);            quanpaixu(a);            if (isTrue) {                System.out.println("true");            } else                System.out.println("false");        }    }}
0 0
原创粉丝点击