1. 程式人生 > >解決:輸入一個n輸出以n為長度的二進位制數串的所有可能,並從小到大輸出所有

解決:輸入一個n輸出以n為長度的二進位制數串的所有可能,並從小到大輸出所有

一開始看到這個問題時,會想到用0和1的排序,去尋找其中的規律,總結出表示式。
看似可行,但是在尋找規律時會發現每種情況之間都有一定的規律但不好用表示式表示出來,如:
n=3;
輸出結果為: 000;.
001;.
010;.
011;.
100;.
101;.
110;.
111;.
就可以看到第一列四個一組,有兩組;第二列兩個一組,四組;第三列,一個一組,八組;
但是發現了規律,要寫出關係式並且可以依次這樣輸出,是比較難的;
而且還要從小到大輸出 。就需要判斷大小,由陣列成的排序,無法比較它們的大小;
所以就需要轉變思路:既然要二進位制那麼就轉換為二進位制。
還可以得到規律:依舊以n=3;為例:
在最後的一個二進位制大小為12 ^2+ 1

2 ^1+1*2 ^0=7=2 ^3-1;
這個數是最大數,最小為0;在 7 之前的數都可以輸出;
所以可以採用for語句,從小到大依次將十進位制數改為二進位制,這樣就同時滿足了從小到大輸出,和二進位制的 輸出;
大致程式碼如下:
在這裡插入圖片描述
n=3;的結果:
在這裡插入圖片描述
所以輸出正確 。