本文最后更新于:1 年前


在刷蓝桥杯试题时候,有一道很意思又有丶烧脑的题目👇


资源限制

时间限制:1.0s 内存限制:256.0MB

问题描述

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

00000

00001

00010

00011

00100

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

输入格式

本试题没有输入。

输出格式

输出32行,按从小到大的顺序每行一个长度为5的01串。

样例输出

00000
00001
00010
00011
<以下部分省略>

提交代码(Java)

暴力输出

刚开始想不出什么好办法,就直接把32个都写出来。抱着玩的心态,试试暴力输出看看系统给不给过,但是没想到,还真给我过了hhh

public class Main {
	public static void main(String[] args) {
		System.out.println("00000");
		System.out.println("00001");
		System.out.println("00010");
		System.out.println("00011");
		System.out.println("00100");
		System.out.println("00101");
		System.out.println("00110");
		System.out.println("00111");
		System.out.println("01000");
		System.out.println("01001");
		System.out.println("01010");
		System.out.println("01011");
		System.out.println("01100");
		System.out.println("01101");
		System.out.println("01110");
		System.out.println("01111");
		System.out.println("10000");
		System.out.println("10001");
		System.out.println("10010");
		System.out.println("10011");
		System.out.println("10100");
		System.out.println("10101");
		System.out.println("10110");
		System.out.println("10111");
		System.out.println("11000");
		System.out.println("11001");
		System.out.println("11010");
		System.out.println("11011");
		System.out.println("11100");
		System.out.println("11101");
		System.out.println("11110");
		System.out.println("11111");
	}
}

五层循环

这是我想到的第二个方法,就类似说的“逢二进一”

public class Main {
	public static void main(String[] args) {
		int a,b,c,d,e;
		for(a=0;a<2;++a)
		  for(b=0;b<2;++b)
			for(c=0;c<2;++c)
			  for(d=0;d<2;++d)
				for(e=0;e<2;++e)
                    System.out.printf("%d%d%d%d%d\n",a,b,c,d,e);
	}
}


以下两种方法均来自网络。


十进制转换二进制

public class Main {
	public static void main(String[] args) {
		for(int i=0;i<32;i++){
			int a,b,c,d,e;
			a = i%32/16;
			b = i%16/8;
			c = i%8/4;
			d = i%4/2;
			e = i%2;
			System.out.printf("%d%d%d%d%d\n",a,b,c,d,e);
	    }
	}
}

以下标求1

一共是32个串,给每个串设置0-31的下标。根据下标,寻找对应串中1出现的位置。👇

比如,下标3表示的串是“00011”,利用while循环可以找到出现1的下标是1、2

public class Main {
	public static void main(String[] args) {
		for(int i=0;i<=31;i++){
			int a[]= new int[5];// 默认初始化值为0
			//或 int a[]= {0,0,0,0,0};
			int temp=i;
			int index=0;
			while(temp!=0)
			{
				a[index]=temp%2;
				index++;
				temp/=2;
			}
			for(int idx=4;idx>=0;idx--)
				System.out.print(a[idx]);
			System.out.println();
		}
	}
}

 目录