蓝桥杯 基础练习 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);
}
}
}
}
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。