日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二进制法生成1-n的子集

發布時間:2025/3/12 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二进制法生成1-n的子集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先上代碼:

#include<iostream> using namespace std;void print_subset(int n, int s){for(int i=0;i<n;i++)if(s&(1<<i)){printf("%d",i);} printf("\n");} int main(){int n;cin>>n; for(int i=0;i<(1<<n);i++){print_subset(n,i);if(i!=0)cout<<"#num:"<<i<<endl;} }

列一下表

S=2時,對應的二進制是10, 那么在void函數的for循環中循環到1<<1時(此時i為1) s&(1<<i)為1 因此輸出1.s=3時,對應的二進制是11, 在void函數的for循環中循環到(1<<0,二進制就是01), s&(1<<0) 二進制為 01 >0 輸出0, 在void函數的for循環中循環到(1<<1,二進制就是10), s&(1<<1)二進制為10 > 0 輸出1后面以此類推

子集是和上面這些數比的,輸出的話輸出的是i

——————————
s:11(3)
與之做&操作的二進制數: 1 ,10(1<< i,i=0,1)
1(i=0),10 (i=1)
因此當s為3時 輸出01
——————————

那么看一下main函數中的循環,i從0到3循環,依次輸出:
s:0 輸出:換行
s:1 輸出:0
s:2 輸出; 1
s:3 輸出:01

上面說打印(0,1,2.。。。n-1)的子集:
如果打印(1,。。。,n),只需輸出i+1

總結

以上是生活随笔為你收集整理的二进制法生成1-n的子集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。