zoukankan      html  css  js  c++  java
  • T1317:【例5.2】组合的输出

    【题目描述】

    排列与组合是常用的数学方法,其中组合就是从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

    解题思路

      全排列变形,判断条件要增加一个:后一个数大于前一个数;

    代码如下

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 int n, r, st[1010];
     5 bool book[1010];
     6 void dfs(int u){
     7     if(u == r + 1){
     8     
     9         for(int i = 1; i <= r; i++)    printf("%3d", st[i]);
    10         printf("
    ");
    11     }
    12 
    13     for(int i = 1; i <= n; i++){
    14         if(!book[i] && st[u - 1] < i){
    15             st[u] = i;
    16             book[i] = true;
    17             dfs(u + 1);
    18             book[i] = false; 
    19         }
    20     }    
    21 
    22     
    23 }
    24 int main(){
    25     scanf("%d %d", &n, &r);
    26     dfs(1);
    27     return 0;
    28 } 
    View Code




    
    
    
    
  • 相关阅读:
    Codeforces Round#410 Div.2
    AtCoder Beginner Contest-060
    如何将gedit变成c++编译器
    洛谷 P2486 [SDOI2011]染色
    让lu哥头痛了许久的代码(洛谷:树的统计)
    字符串模拟入门
    luogu P1553 数字反转(升级版)
    那些令人难忘的——坑
    luogu P1341 无序字母对
    最短路相关题目
  • 原文地址:https://www.cnblogs.com/zoom1109/p/11175392.html
Copyright © 2011-2022 走看看