蓝桥杯 基础练习 01字串

对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:

00000

00001

00010

00011

00100

请按从小到大的顺序输出这32种01串。

对于这题,你想到了什么吗?

没错,这题其实是二进制加法的变种,依次递增而已,并没有什么区别。

事实上,上学期写过二进制加法的代码,感觉应该不太难,结果脑子生锈了。

本题没有输入,我们来看看代码吧,因为只是一个二进制累加问题:

import java.util.*;

/**
 * 这是一个特别傻逼的程序 为了避免看不懂 我决定写一下注释
 * 我们基于:除了位数改变以外,其他的顺序相同,所以可以这么做。
 */
public class ZeroOneString {
    public static void main(String[] args) {
        /* 准备好一个不固定长度的数组 */
        ArrayList<String> list = new ArrayList<String>();
        /* 准备好一位数 因为全0 不好计算 */
        list.add("0");
        list.add("1");
        int bit = 1;
        int size = 0;
        for (bit = 1; bit <= 5; bit++) {
            size = list.size();
            // System.out.println("Now: bit: " + bit);
            for (int i = 0; i < size; i++) {
                String x = "";
                String y = "";
                String num = list.get(i);

                /* 前导零 */
                for (int j = 0; j < 5 - bit; j++) {
                        x += "0";
                }

                /* 指定位数置1 */
                if (bit > 1) {
                    y += "1";
                }

                /* 补充0 */
                for (int j = 0; j < bit - num.length() - 1; j++) {
                    y += "0";
                }

                /* 其他照常 */
                y += num;

                if (bit > 1) {
                    list.add(y);
                }

                System.out.println(x + y);
            }
        }
    }
}

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 源码, 知识, 题目

添加新评论