题目:

Java 计算24点

程序:

package com.ynu.point;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Scanner;

/**
 * 5
 * 1 1 22 23 2 -- 1<=n<=23
 * 3 -- 子集相互不同
 */
public class point24 {

    public static void main(String[] args) {
        //输入
        Scanner sc = new Scanner(System.in);
        ArrayList<Integer> numbers = new ArrayList<>(23);
        int n = sc.nextInt();
        for(int i = 0;i<n;i++){
            int t = sc.nextInt();
            numbers.add(t);
        }

        //排序--升序
        Collections.sort(numbers);

        //枚举子集,计算24点
        HashSet<ArrayList<Integer>> pointSet = new HashSet<>();
        for(int i=1;i<=Math.pow(2,n)-1;i++){
            ArrayList<Integer> temp = getSubList(numbers,i,n);
            if(calculation(temp)==24){
                pointSet.add(temp);
            }
        }

        System.out.println(pointSet.size());

    }

    private static int calculation(ArrayList<Integer> para){
        if(para == null || para.isEmpty()){
            return 0;
        }else {
            int result = 0;
            for(Integer i : para){
                result += i;
            }
            return result;
        }
    }

    private static ArrayList<Integer> getSubList(ArrayList<Integer> num,Integer pos,Integer length){
        //去掉只有一位数的集合
        if((pos&(pos-1)) == 0){
            return null;
        }
        ArrayList<Integer> result = new ArrayList<>(length);
        String index = Integer.toBinaryString(pos);
        int il = index.length();
        //二进制位数不足时,向左补全
        if(il<length){
            for(int i = 0;i<length-il;i++){
                index = "0"+index;
            }
        }
        for(int i=0;i<index.length();i++){
            if('1' == index.charAt(i)){
                result.add(num.get(i));
            }
        }
        return result;
    }
}

说明:

第一版代码,暂时未做优化,优化后将即使更新

相关文章:

  • 2021-11-20
  • 2021-11-24
  • 2021-07-02
  • 2022-12-23
  • 2021-06-14
  • 2021-05-03
  • 2021-10-25
  • 2022-12-23
猜你喜欢
  • 2021-07-24
  • 2022-12-23
  • 2022-01-11
  • 2022-02-26
  • 2021-07-30
相关资源
相似解决方案