解决:输入一个n输出以n为长度的二进制数串的所有可能,并从小到大输出所有

一开始看到这个问题时,会想到用0和1的排序,去寻找其中的规律,总结出表达式。
看似可行,但是在寻找规律时会发现每种情况之间都有一定的规律但不好用表达式表示出来,如:
n=3;
输出结果为: 000;.
001;.
010;.
011;.
100;.
101;.
110;.
111;.
就可以看到第一列四个一组,有两组;第二列两个一组,四组;第三列,一个一组,八组;
但是发现了规律,要写出关系式并且可以依次这样输出,是比较难的;
而且还要从小到大输出 。就需要判断大小,由数组成的排序,无法比较它们的大小;
所以就需要转变思路:既然要二进制那么就转换为二进制。
还可以得到规律:依旧以n=3;为例:
在最后的一个二进制大小为12 ^2+ 12 ^1+1*2 ^0=7=2 ^3-1;
这个数是最大数,最小为0;在 7 之前的数都可以输出;
所以可以采用for语句,从小到大依次将十进制数改为二进制,这样就同时满足了从小到大输出,和二进制的 输出;
大致代码如下:
在这里插入图片描述
n=3;的结果:
在这里插入图片描述
所以输出正确 。

猜你喜欢

转载自blog.csdn.net/missli0/article/details/84112350