1. 代码关键部分在于按位置穷举,设置一个数组str[10001]用于存放穷举的二进制数。
2.str[0]位置放0时穷举所有可能,放1时穷举所有可能;str[1]位置放0时穷举所有可能,放1时穷举所有可能;以此类推。
1 /******************* 2 描述: 3 4 输入一个小于20的正整数n,要求按从小到大的顺序输出所有的n位二进制数,每个数占一行。 5 6 输入: 7 8 输入一个小于20的正整数n。 9 10 输出: 11 12 按从小到大的顺序输出所有的n位二进制数,每个数占一行。 13 14 输入样例: 15 16 3 17 18 输出样例: 19 20 000 21 001 22 010 23 011 24 100 25 101 26 110 27 111 28 29 *******************/ 30 #include<iostream> 31 using namespace std; 32 33 int str[1001]; //定义一个数组用来存放枚举的二进制数 34 int n; 35 36 int main() 37 { 38 cin << n; 39 40 dfs(0); 41 42 return 0; 43 } 44 45 void dfs(int x) 46 { 47 int i; 48 if (x == n) //判断递归条件,如果n位的二进制数都枚举结束,则递归结束。 49 { 50 for (i=0; i<n; i++) //输出 51 { 52 cout << str[i]; 53 } 54 cout << endl; 55 } 56 else //否则,当第一位为0、1时进行枚举,次高位为0或1时枚举,以此类推 57 { 58 str[x] = 0; 59 dfs(x+1); 60 str[x] = 1; 61 dfs(x+1); 62 } 63 }