zoukankan      html  css  js  c++  java
  • 洛谷P1157 组合的输出

    洛谷1157 组合的输出

    题目描述

    排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r<=n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。
        现要求你不用递归的方法输出所有组合。
        例如n=5,r=3,所有组合为:
        l 2 3    l 2 4    1 2 5    l 3 4    l 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)。

    输出格式:

    所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。
    **注意哦!输出时,每个数字需要3个场宽,pascal可以这样:
    write(ans:3);

    输入输出样例

    输入样例#1:

    5 3

    输出样例#1:

      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

    【思路】

      Dfs

      唯一需要注意的就是c++的域宽控制。

    【代码】

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 
     5 const int maxn = 22;
     6 
     7 int A[maxn];
     8 int n,r;
     9 
    10 void dfs(int d,int nowi) {
    11     if(d==r) {
    12         for(int i=0;i<r;i++)
    13           printf("%3d",A[i]);
    14         printf("
    ");
    15     }
    16     if(r-d>n-nowi+1) return ;
    17     for(int i=nowi;i<=n;i++)  {
    18         A[d]=i;
    19         dfs(d+1,i+1);
    20     }
    21 }
    22 
    23 int main() {
    24     scanf("%d%d",&n,&r);
    25     dfs(0,1);
    26     return 0;
    27 }
  • 相关阅读:
    刘志博 作业 2.15
    刘志博 作业2.6
    作业一
    2.6
    张靖悦
    java 2.15
    java 2.6
    java 1.12
    java 1.8
    java 1.3
  • 原文地址:https://www.cnblogs.com/lidaxin/p/4863166.html
Copyright © 2011-2022 走看看