一个24点的算法
2017-08-28 13:18
393 查看
import java.util.Random; public class HelloWorld { public static String formular; public static void main(String[] args) { int[] card= new int[4]; //Generate 4 cards randomly int max=13; int min=1; Random random = new Random(); for (int i = 0 ;i<4;i++) { int s = random.nextInt(max)%(max-min+1) + min; card[i] = s; System.out.println("Card " + i + ": " + s); } if (canCalculate(card[0],card[1],card[2],card[3],24)) { System.out.println("formular: " + formular+ "=24"); } else { System.out.println("Can't find answer"); } } //To check function(a,b,c,d) = result public static boolean canCalculate(int a, int b, int c, int d, int result) { int[] input = {a,b,c,d}; for (int i=0; i<4; i++) { //other input index int index1 = i+1>3?i-3:i+1; int index2 = i+2>3?i-2:i+2; int index3 = i+3>3?i-1:i+3; //Scenario 1: input[i]+function(other inputs) if (input[i] <= result) { if (canCalculate(input[index1], input[index2], input[index3], result-input[i])) { formular=input[i] + "+(" + formular + ")"; return true; } } //Scenario 2: input[i]-function(other inputs) if (input[i] > result) { if (canCalculate(input[index1], input[index2], input[index3], input[i]-result)) { formular = input[i] + "-(" + formular + ")"; return true; } } //Scenario 3: input[i] * function(other inputs) if (resul 4000 t%input[i] == 0 ) { if (canCalculate(input[index1], input[index2], input[index3], result/input[i])) { formular=input[i] + "*(" + formular + ")"; return true; } } //Scenario 4: input[i] / function(other inputs) if (input[i]%result == 0 ) { if (canCalculate(input[index1], input[index2], input[index3], input[i]/result)) { formular=input[i] + "/(" + formular + ")"; return true; } } } return false; } //To check function(a,b,c) = result public static boolean canCalculate(int a, int b, int c, int result) { int[] input = {a,b,c}; for (int i=0; i<3; i++) { //Scenario 1: input[i]+function(other inputs) if (input[i] <= result) { if (canCalculate(input[i+1>2?i-2:i+1], input[i+2>2?i-1:i+2], result-input[i])) { formular=input[i] + "+(" + formular + ")"; return true; } } //Scenario 2: input[i]-function(other inputs) if (input[i] > result) { if (canCalculate(input[i+1>2?i-2:i+1], input[i+2>2?i-1:i+2], input[i]-result)) { formular = input[i] + "-(" + formular + ")"; return true; } } //Scenario 3: input[i] * function(other inputs) if (result%input[i] == 0 ) { if (canCalculate(input[i+1>2?i-2:i+1], input[i+2>2?i-1:i+2], result/input[i])) { formular=input[i] + "*(" + formular + ")"; return true; } } //Scenario 4: input[i] / function(other inputs) if (input[i]%result == 0 ) { if (canCalculate(input[i+1>2?i-2:i+1], input[i+2>2?i-1:i+2], input[i]/result)) { formular=input[i] + "/(" + formular + ")"; return true; } } } return false; } //To check function(a,b) = result public static boolean canCalculate(int a, int b, int result) { if (a+b==result) { formular = a + "+" + b ; return true; } if (a*b==result) { formular = a + "*" + b ; return true; } if (a-b==result) { formular = a + "-" + b ; return true; } if (a/b==result & a%b == 0) { formular = a + "/" + b ; return true; } if ((b-a) == result) { formular = b + "-" + a ; return true; } if (b/a==result & b%a==0) { formular = b + "/" + a ; return true; } return false; } }
相关文章推荐
- 一个和24点有关的算法题 - 无解中
- 一个类24点问题算法实现
- 设计一个Android关于24点的小游戏之一(24点算法设计)
- javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
- 简单算法--将一个整型数字逆转
- 算法22:给定一个排好序的linked list,删除其中所有的重复元素。比如给定1->2->3->3-> 4->4->5,返回1->2->5。给定1->1->1->2->3,返回2->3
- 一个应用实例详解卡尔曼滤波及其算法实现
- 基于Linux伙伴算法和DirecfFB架构的帧缓冲驱动层内存管理的一个实现
- 开篇词,贴一个刚写的24点牌程序作为实验
- 判断五子棋获胜方的一个算法
- 每天学习一算法系列(13) (输入一个单向链表,输出该链表中倒数第k个结点)
- cc150:实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针
- 一个伪随机数生成算法
- 又是一个渐变色生成算法
- BBS 设计思路系列 ---- 网友提供的一个用户在CSDN的总分算法
- [算法]不使用*、/、+、-、%操作符求一个数的1/3
- 一个朋友面试时遇到的算法题(怎么组合后得到最大整数)
- 一个小算法题目
- 设计一个算法,要求在20个数字中(0到19)随机选取十个数字,但是这十个数字不能重复(用C语言或者OC实现)
- 检查一个二叉树是否平衡的算法分析与C++实现