24点游戏

来源:互联网 发布:电脑自动还原软件 编辑:程序博客网 时间:2024/06/16 21:24

1.问题描述

  输入4个整数,运用四则元素,可以加括号,判断其运算结果能不能是24。

2.相关定理

  s是一个有理数的集合。
  函数f(s)定义如下:
  如果s中只有一个元素,则f(s)=s;
  否则,f(s)=∪f(s-{r1,r2}+{r}),r1,r2是s中的任意两个元素,r的取值为r1和r2进行四则运算的结果。
 
   因此我们从s中任取两个元素,求其四则运算的结果r,集合中元素的个数就减少了,继续递归下去,最后只剩两个元素,进行四则运算看其结果是否是24。

3.代码

  
package cn.edu.hit;import java.util.Scanner;public class TwentyFour2 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int[] array = new int[4];for (int i = 0; i < array.length; i++) {array[i] = in.nextInt();}TwentyFour2 t = new TwentyFour2();if(t.equal(4, array)){System.out.println(true);}else{System.out.println(false);}}public boolean equal(int n,int[] array) {if(n==1){//只剩最后一个元素if(array[0]==24){return true;}else{return false;}}for (int i = 0; i < n; i++) {for (int j = i+1; j < n; j++) {int a,b;a = array[i];b = array[j];array[j] = array[n-1];//将最后一个数移过来array[i] = a+b;if(equal(n-1, array)){return true;}array[i] = a-b;if(equal(n-1, array)){return true;}array[i] = b-a;if(equal(n-1, array)){return true;}array[i] = a*b;if(equal(n-1, array)){return true;}if(b!=0){array[i] = a/b;if(equal(n-1, array)){return true;}}if(a!=0){array[i] = b/a;if(equal(n-1, array)){return true;}}//如果进行以上四则运算不能得到24,则恢复数据,选取其他两个数array[i] = a;array[j] = b;}}return false;}}

原创粉丝点击