rainyroad

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

题意:给你1~n个数从中任意选m个数,然后输出所有可能结果

思路:和上题一样,只不过由于多了一个限制,就是最多只能选m个数,所以多了一个状态条件,就是已选数字的个数sum,

           递归边界也变了,只要是列举够m个数,就可以输出了。当列举到第n个数的时候,所有可能结果都列举完了,就可以返回不再列举了。

           下面上代码。

#include<iostream>

using namespace std;

int n,m;

void dfs(int cur,int sum,int state)
{
    if(sum==m)
    {
        for(int i=0;i<n;i++)
        if(state>>i&1)
        cout<<i+1<<" ";
        cout<<"\n";
        return ;
    }
    if(cur==n)return;
    else
    {
        dfs(cur+1,sum+1,state+(1<<cur));
        dfs(cur+1,sum,state);        
    }    
}

int main()
{
    cin>>n>>m;
    dfs(0,0,0);
    return 0;
}

 

posted on 2019-01-19 22:41  rainyroad  阅读(120)  评论(0编辑  收藏  举报