zoukankan      html  css  js  c++  java
  • 组合的输出(递归)

    组合的输出

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 13  解决: 7
    [提交][状态][讨论版][命题人:quanxing]

    题目描述

    排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。

    现要求你用递归的方法输出所有组合。

    例如n=5,r=3,所有组合为:

    1 2 3   1 2 4   1 2 5   1 3 4   1 3 5   1 4 5   2 3 4   2 3 5   2 4 5   3 4 5

    输入

    一行两个自然数n、r(1<n<21,1≤r≤n)。

    输出

    所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。

    样例输入

    5 3

    样例输出

      1  2  3
      1  2  4
      1  2  5
      1  3  4
      1  3  5
      1  4  5
      2  3  4
      2  3  5
      2  4  5
      3  4  5

    提示

    #include <iostream>
    #include <cstring>
    #include <string>
    #include <algorithm>
    using namespace std;
    int n,r;
    bool v[25];
    int a[25];
    void display()
    {
        for(int i=1;i<=r;i++)
        {
            printf("%3d",a[i]);
        }
        cout<<endl;
    }
    
    void dfs(int k,int s)
    {
        int i;
        if(s==r+1) 
        {
            display();
            return;
        }
        for(i=k;i<=n;i++)
        {
            if(!v[i])
            {
                v[i]=1;
                a[s]=i;
                dfs(i,++s);
                v[i]=0;
                s--;
            }
        }
    }
    
    
    
    int main()
    {
        cin>>n>>r;
        memset(v,0,sizeof(v));
        dfs(1,1);
    }


  • 相关阅读:
    Android开发系列之ListView用法
    自省
    fake feeling ?
    我心中的天使
    2020.6.16
    python面试题
    tcp
    Short + skip + limit
    01_pyttsx3_将文本文字转为语音播放
    mongo_Linux下不进入数据库查数据
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/13271110.html
Copyright © 2011-2022 走看看