蓝桥杯 基础练习 01字串
对于长度为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)