AcWing 92. 遞歸實現指數型枚舉

AcWing 92. 遞歸實現指數型枚舉

題目連接ios

從 1~n 這 n 個整數中隨機選取任意多個,輸出全部可能的選擇方案。c++

輸入格式

輸入一個整數n。spa

輸出格式

每行輸出一種方案。code

同一行內的數必須升序排列,相鄰兩個數用剛好1個空格隔開。blog

對於沒有選任何數的方案,輸出空行。遞歸

本題有自定義校驗器(SPJ),各行(不一樣方案)之間的順序任意。ci

數據範圍

1≤n≤151≤n≤15get

輸入樣例:

3

輸出樣例:

3
2
2 3
1
1 3
1 2
1 2 3

題解

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;
int n;
void dfs(int u,int state)
{
	if(u==n)//表明枚舉結束,開始輸出 
	{
		for(int i=0;i<n;i++)
			if(state >> i & 1)//若是state右移i位,其值等於1
				cout<<i+1<<' ';
		cout<<endl;
		return;
	}
	dfs(u+1,state);//不用u這個數
	dfs(u+1,state | 1 << u);//state的第u位 置爲1   用u這個數 
}
int main()
{
	cin>>n;
	dfs(0,0);//左邊的0表示第幾個數,右邊的表示狀態 
	return 0;
 }
相關文章
相關標籤/搜索