24点游戏算法-华为OJ
来源:互联网 发布:淘宝网上买的300元的狗 编辑:程序博客网 时间:2024/05/21 09:15
网上搜了一些答案,发现有些答案在3个数运算等于24后就返回true了,明显不对。
这里还是用全排列忽略掉+-*/的优先顺序,然后对每一个排列进行dfs。
import java.util.*;public class Main {static ArrayList<Integer> list = new ArrayList<>();public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNextInt()) {list.clear();int[] a = new int[4];for (int i = 0; i < 4; i++) {a[i] = sc.nextInt();}permutation(a, 0, 4);//求全排列boolean ok = false;for(int j = 0;j<list.size()/4;j++){int[] b = new int[4];for(int i = 0;i<4;i++){b[i] = list.get(j*4+i);}if(f((double)b[0], b,1)){ok = true;break;}}System.out.println(ok);}}public static boolean f(double result, int[] a, int index) {if (index ==4){return result == 24;}else if(f(result + a[index], a,index+1) || f(result - a[index], a, index+1)|| f(result * a[index], a,index+1)|| (a[index] != 0 && f(result / a[index], a,index+1)))return true;return false;}static void permutation(int[] a,int k,int n){//求全排列if(k==n){for(int i:a)list.add(i);}else{for(int i = k;i<n;i++){//求ABCD的全排列,将ABCD分别和A交换,然后求剩下的数的全排列swap(a,i,k);permutation(a, k+1, n);swap(a,i,k);}}}static void swap(int[] a,int p,int q){int tmp = a[p];a[p] = a[q];a[q] = tmp;}}
0 0
- 华为oj 24点游戏算法
- 【华为OJ】【097-24点游戏算法】
- 华为OJ 初级:24点游戏算法
- 24点游戏算法-华为OJ
- 华为OJ:24点游戏算法
- 华为oj初级 24点游戏算法
- 华为oj 24点游戏
- 华为OJ——24点游戏算法
- [华为OJ--C++]097-24点游戏算法
- 华为OJ——24点游戏算法
- 华为OJ(24点游戏)
- 华为OJ平台练习题--24点游戏
- OJ---24点游戏算法
- 华为 2033 24点游戏算法
- 华为OJ(扑克牌之24点游戏)
- 华为OJ训练之0022-170107-24点游戏
- OJ 系列之24点游戏算法
- 华为oj_24点游戏算法
- LCA 板子题
- 设计模式第二篇-单例设计模式
- (TCP/IP卷一)ARP,RARP地址解析协议
- TOP to DOWN 创建运动型骨架模型 creo3.0 曲柄摇杆机构仿真
- git 恢复工作区删除的文件
- 24点游戏算法-华为OJ
- Centos7下安装mysql
- mongodb由于目标计算机积极拒绝 无法连接
- Linux awk简介
- Java中的反射
- 关于android LayoutInflater那些事
- IEnumerable和IEnumerator
- 使用 Storyboard 用到的问题
- 编写10个线程,第一个线程从1加到10,第二个线程从11加到20…第十个线程从91加到100, 最后再把10个线程结果相加。