【例5.2】组合的输出

【例5.2】组合的输出

链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1317

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

排列与组合是常用的数学方法,其中组合就是从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<cstdio>
#include<string>
#include<cmath>
#include<iomanip>
using namespace std;
int a[25];
int n,r;
void search(int i){
    if(i==r+1){
        int j=1;

        for(j=1;j<i;j++)
            cout<<setw(3)<<a[j];

        cout<<endl;
        return;
    }
    for(int k=a[i-1]+1;k<=n;k++){
        a[i]=k;
        search(i+1);
    }

}
int main()
{
    a[0]=0;
    cin>>n>>r;
    search(1);

}
时间: 2024-10-12 15:20:02

【例5.2】组合的输出的相关文章

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). [输出] 所有的组合,每一个组合占一行且

组合的输出

[问题描述] 排列与组合是常用的数学方法,其中组合就是从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). [输出]

组合的输出(回溯、dfs)

问题 O: [回溯法]组合的输出 题目描述 排列与组合是常用的数学方法,其中组合就是从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<

洛谷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 输入输出格式 输入格式: 一行两个自

P1157 组合的输出

排列与组合是常用的数学方法,其中组合就是从nn个元素中抽出rr个元素(不分顺序且r \le n)r≤n),我们可以简单地将nn个元素理解为自然数1,2,…,n1,2,…,n,从中任取rr个数. 现要求你不用递归的方法输出所有组合. 例如n=5,r=3n=5,r=3,所有组合为: 12 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 5123,124,125,134,135,145,234,235,245

随机排列组合的输出

在算法的书本上描述了这样的一个问题:有3个白球,4个黑球,5个蓝球,请输出一共有多少种组合,与此同时,输出每一种组合的方式.这个问题,我一直都在思考,虽然我知道早已经有了答案.递归总是让我知道自己的蹩脚的逻辑.我的倔强的脾气让我一直都在研究,到底应该如何写这个递归的方程式.今天晚上写了一个模糊的算法,还只是一个不能实现的雏形. 随机排列组合:  m个红球 , n个白球, l个蓝球 递归的函数如下: int list(m,n,l) { if(m>1) { list(m-1,n,l); } if(n

【递归入门】组合的输出

题目描述 排列与组合是常用的数学方法,其中组合就是从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 ). 输出 所有的组

C++入门经典-例3.23-使用嵌套循环输出乘法口诀表

1:代码如下: // 3.23.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iomanip> #include <iostream> using namespace std; void main(void) { int i,j; i=1; j=1; for(i=1;i<10;i++) { for(j=1;j<i+1;j++) cout << i << "

深度优先DFS-----例3 例4

例3:组合问题 输出m个数中取n个数的所有组合.例如m=5,n=3的所有组合为:1      2      31      2      41      2      5 1      3      41      3      51      4      5 2      3      42      3      52      4      5 3      4      5 #include<iostream> using namespace std; int m,n,a[10];