1 条题解

  • -1
    @ 2026-7-13 11:14:11

    这道题有三种解法

    1:正常解法

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 30;
    int a[N];
    int n;
    long long ans;
    int main()
    {
    	cin >> n;
    	for(int i=1;i<=n;i++)
    	{
    		a[i]=i-1;
    	}
    	for(int i=0;i<(1<<n);i++)
    	{
    		for(int j=n-1;j>=0;j--)
    		{
    			if(i>>j&1)
    			{
    				cout << a[n-j] << " ";
    			}
    		}
    		cout << '\n';
    	}
    	return 0;
    }
    
    

    2:bitset解法

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 30;
    int a[N];
    int n;
    int main()
    {
    	
    	cin >> n;
    	for(int i=1;i<=n;i++)
    	{
    		a[i]= i-1;
    	}
    	for(int i=0;i<(1<<n);i++)
    	{
    		bitset<22> b(i);
    		for(int j=n-1;j>=0;j--)
    		{
    			if(b[j])
    			{
    				cout << a[n-j] << ' ';
    			}
    		}
    		cout << '\n';
    	}
    	return 0;
    }
    
    

    3:dfs解法

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 30;
    int a[N];
    int n;
    void dfs(int depth,string s)
    {
    	if(depth > n)
    	{
    		for(int i=0;i<s.size();i++)
    		{
    			if(s[i] == '1')
    			{
    				cout << a[i+1] << ' ';
    			}
    		}
    		cout << '\n';
    		return;
    	}
    	dfs(depth+1,s+"0");
    	dfs(depth+1,s+"1");
    }
    int main()
    {
    	cin >> n;
    	for(int i=1;i<=n;i++)
    	{
    		a[i] = i-1; 
    	}
    	dfs(1,"");
    	return 0;
    }
    
    

    制作不易,义父们给个赞吧!

    • @ 2026-7-26 20:05:50

      给好评的好人一生平安

  • 1

信息

ID
424
时间
1000ms
内存
256MiB
难度
6
标签
递交数
280
已通过
91
上传者