对于长度为6位的一个01串,每一位都可能是0或1,一共有64种可能。它的前几个是:
000000
000001
000010
000011
000100
请按从小到大的顺序输出这64种01串。
算法思路:
长度为6的01串,我们就可以想到new一个大小为6的int数组,
每一位的可能性只能是0和1,这时候我们就可以想到,好像%2得出的值不是0就是1,
先写一个for循环,从0开始,值到63为止,初始化角标值和 数据
再写一个while循环,循环条件则为n是否为0,n不断%2来赋值将每个值进行%运算来存入int数组中,,而 /2来缩小n的值来使程序趋向出口,
如果这样存进数组的话,数组的值和题目的值是逆序的,所以我们输出的时候要做一个逆序输出
import java.util.Scanner;
public class A1001_1 {
public static void main(String[] args) throws Exception {
int[] a = new int[6];
for (int i = 0; i < 64; i++) {
int n = i, j = 0; //n为i值,而j为数组角标
while (n != 0) {
a[j++] = n % 2; //因为只有0和1,所以%2,得出的值不是0就是1,没%一次2,那么n的值就要缩小二分之一,所以下面的n要除以2
n /= 2; //因为n是int类型,/2是小数的话会省略小数点后的数,当n为0就停止循环了
}
for (int k = 5; k >= 0; k--) {
System.out.print(a[k]);
}
System.out.println();
}
}
}
网友评论