CodeSky 代码之空

随手记录自己的学习过程

蓝桥杯 基础练习 01字串

2015-12-27 23:44分类: Java评论: 0

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

00000

00001

00010

00011

00100

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

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

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

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

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

1import java.util.*;
2
3/**
4 * 这是一个特别傻逼的程序 为了避免看不懂 我决定写一下注释
5 * 我们基于:除了位数改变以外,其他的顺序相同,所以可以这么做。
6 */
7public class ZeroOneString {
8	public static void main(String[] args) {
9		/* 准备好一个不固定长度的数组 */
10		ArrayList<String> list = new ArrayList<String>();
11		/* 准备好一位数 因为全0 不好计算 */
12		list.add("0");
13		list.add("1");
14		int bit = 1;
15		int size = 0;
16		for (bit = 1; bit <= 5; bit++) {
17			size = list.size();
18			// System.out.println("Now: bit: " + bit);
19			for (int i = 0; i < size; i++) {
20				String x = "";
21				String y = "";
22				String num = list.get(i);
23
24				/* 前导零 */
25				for (int j = 0; j < 5 - bit; j++) {
26						x += "0";
27				}
28
29				/* 指定位数置1 */
30				if (bit > 1) {
31					y += "1";
32				}
33
34				/* 补充0 */
35				for (int j = 0; j < bit - num.length() - 1; j++) {
36					y += "0";
37				}
38
39				/* 其他照常 */
40				y += num;
41
42				if (bit > 1) {
43					list.add(y);
44				}
45
46				System.out.println(x + y);
47			}
48		}
49	}
50}
51

评论 (0)