美文网首页
java中生成一定位数的所有可能的二进制组合的结果

java中生成一定位数的所有可能的二进制组合的结果

作者: 流年花影 | 来源:发表于2017-09-08 22:35 被阅读0次

这两天在刷蓝桥杯题库的时候遇到这样一道题
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。每位选手都有一个起步的分数为10分。某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。你的任务是算出所有可能情况。每个答案占一行。答案写在“解答.txt”中,不要写在这里!
这道题其实本身没有什么难度,只需要生成十位二进制的所有组合,然后逐一去测试就好,关键就在于如何生成这些组合,在之前我并不知道java中有将整形变量转换为对应二进制的方法,所以使用笨方法,用十层循环生成所有结婚,代码如下

public class Text {

    public static void main(String[] args) {
        int a=(int) Math.pow(2, 10);
        String[] s=new String[a];
        int x=0;
        for(int q=0;q<=1;q++){          //十层for循环生成所有可能的十位二进制组合的可能结果
            for(int w=0;w<=1;w++){
                for(int e=0;e<=1;e++){
                    for(int r=0;r<=1;r++){
                        for(int t=0;t<=1;t++){
                            for(int y=0;y<=1;y++){
                                for(int u=0;u<=1;u++){
                                    for(int i=0;i<=1;i++){
                                        for(int o=0;o<=1;o++){
                                            for(int p=0;p<=1;p++){
                                                s[x]=q+""+w+""+e+""+r+""+t+""+y+""+u+""+i+""+o+""+p;
                                                x++;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        char[] c=new char[10];
        for(int n=0;n<x;n++){    //对每一个可能的结果进行分析,如果符合题目要求就输出
            int m=10;
            c=s[n].toCharArray();
            for(int z=0;z<=9;z++){
                if(c[z]=='0'){
                    m=m-z-1;
                }else{
                    m=m*2;
                }
            }
            if(m==100){
                System.out.println(s[n]);
            }
        }
    }
}

结果:
1011010000
0111010000
0010110011
可以看出结果正确,但过程过于复杂,如果是更多位的组合,这种方法显然不行,后来通过查资料发现java中有将int变量转换为对应二进制的方法,就尝试了一下,代码如下

public class Text4 {

    public static void main(String[] args) {
        int a=(int) Math.pow(2, 10);
        String[] s=new String[a];
        int x=0;
        for(int i=a;i>0;i--){
            String bin=Integer.toBinaryString(i);  //此方法返回值参数表示的无符号整数的二进制的字符串表示形式(基数为2)
            while(bin.length()<10){                //Integer.toBinaryString只返回参数的二进制表示形式,我们需要的是十位二进制,所以要在结果前面补零
                bin="0"+bin;
            }
            s[x]=bin;
            x++;
        }
        char[] c=new char[10];
        for(int n=0;n<x;n++){    //对每一个可能的结果进行分析,如果符合题目要求就输出
            int m=10;
            c=s[n].toCharArray();
            for(int z=0;z<=9;z++){
                if(c[z]=='0'){
                    m=m-z-1;
                }else{
                    m=m*2;
                }
            }
            if(m==100){
                System.out.println(s[n]);
            }
        }
    }
}
结果:
1011010000 
0111010000
0010110011
可以看出熟悉java自带的一些方法对于我们解决一些问题有很大的帮助

相关文章

  • java中生成一定位数的所有可能的二进制组合的结果

    这两天在刷蓝桥杯题库的时候遇到这样一道题某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答10...

  • 22. 括号生成

    给出n代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,给出n=3,生成结果...

  • Thinking in Java第四章练习10

    Thinking in Java第四章练习10 我的解题思路就是轮询所有的2位数组合,比较乘积和这对数字的各位数的...

  • 22. 括号生成

    数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 有效括号组合需满足...

  • 白盒测试:条件组合覆盖法设计用例

    条件组合覆盖 设计测试用例,使得被测试程序中的每个判定中条件结果的所有可能组合至少执行一次。条件组合覆盖率 = 条...

  • LeetCode 22 [Generate Parenthese

    原题 给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。 样例给定 n = 3, 可生成的...

  • 算法---括号生成

    给定一个括号数量n,生成所有可能的括号组合字符串

  • python基础实例教程-九个实例哦

    排列组合 要求:列出所有可能的四位数字组合,它们彼此不同,没有重复的数字。 分析:排列就好了 代码: 阶梯求和 要...

  • 1056. 组合数的和(15)

    描述 给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字。要求所有可能组合出来的2位数字的和。例...

  • 动态规划:22.括号生成

    /** 题目 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例...

网友评论

      本文标题:java中生成一定位数的所有可能的二进制组合的结果

      本文链接:https://www.haomeiwen.com/subject/orgnjxtx.html