未解决的编程题,我会一直想的,直到想到

题目一:

输入为01的二进制序列,对二进制序列进行切割,使得切割后转为10进制的各段加和的最大值最小

如101101111001

其实我就是想知道不同切割方案后各段的和的分布情况究竟是什么样子的

题目二:

2的i次幂+3的j次幂+5的k次幂的最小top15

题目三:

求一集合{1,2,3,4}的所有子集划分情况,总共有15种,分别有单元素{{1,2,3,4}}、双元素{{1}{2,3,4}}{{1,2}{3,4}}等三元素{{1}{23}{4}}{{12}{3}{4}}等及{{1,2,3,4}},这里没有

一一列举出来,但是大体就是这么个意思,以后会了就回来慢慢补充。

补充第一道题目,只是有了些许的思路,但是还存在一些

package TEXT;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Text11 {
    //题目:求解10111分段后各段求和所有的可能性
    
    private StringBuffer input;
    
    private ArrayList<Integer> listInts = new ArrayList<Integer>();
    /*public Text11(){
        readIn();
        temp = new int[input.length()];
        for(int i=0;i<input.length();i++){
            temp[i] = input.charAt(i)-'0';
        }
    }*/
    /*private void readIn(){
        Scanner in = new Scanner(System.in);
        temp = in.next();
        input = new StringBuffer(temp);
    }*/
    public void compute(int j,List<String> sb,int sum){
        //感觉这个listInts中保存的数并不纯净
    /*    System.out.println("start+sum"+sum);*/
        /*System.out.println(sb.size());*/
        for(int i=j;i<sb.size();i++){
            sb.add(i+1, ",");
            sum+=tranStr2(sb.subList(j, i+1));
            sb.remove(i+1);
            compute(0,sb.subList(i+1, sb.size()),sum);
            listInts.add(sum);//这个listInts的添加位置是不是有问题,才导致添加的数据不仅仅是最终结果,还有一些中间结果
            sum=0;
            /*System.out.println("between+sum"+sum);*/
            /*List<String> tem = sb.subList(i+1, sb.size());
            System.out.println(tem.size());
            for(String s:tem){
                System.out.println(s);
                
            }*/
            /*System.out.println("next");*/
            /*System.out.print(sb.subList(i+1, sb.size()).toString());*/
            
            /*sum = tranStr(sb.toString());*/
            /*System.out.println("end+sum"+sum);*/
            
        }

        
    }
    public void printList(){
        for(Integer ints:listInts){
            System.out.println(ints);
        }
    }
    
    public int tranStr2(List<String> st){
        
        int tempSum=0;
        for(int j=0;j<st.size();j++){
            
            tempSum+=Math.pow(2, st.size()-1-j)*(Integer.parseInt(st.get(j)));
            
        }
        return tempSum;
        
    }
    public static void main(String[] args) {
        //listInts虽然可以包含到所有的解,但是包含的解却不够纯净。。需要改善
        
        Text11 text = new Text11();
        ArrayList<String>list = new ArrayList<String>();
        list.add("1");
        list.add("0");
        list.add("1");
        list.add("0");
        list.add("0");
        list.add("1");
        list.add("1");
        text.compute(0, list, 0);
        text.printList();
        

    }

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值