P1157 组合的输出

简介: P1157 组合的输出

fb95aaf968c94755bcf78b7940bb8fd5.png

排列组合中的组合问题

f()函数在到达叶子节点时要return

#include <bits/stdc++.h>
using namespace std;
const int maxn = 30;
int n, r;
int ans[maxn];
void f(int x, int start) // 已经选了x个数,现在位置是start
{
   if (x > r)
   { // 抽了r个元素
      for (int i = 1; i <= r; i++)
      {
         cout << setw(3) << ans[i] ;
      }
      cout << endl;
      return; // 必须加上
   }
 
   for (int i = start; i <= n; i++)
   { // 不要重复枚举1
      ans[x] = i;
      f(x + 1, i + 1);
      ans[x] = 0;
   }
}
int main() // 依次枚举每个数放哪个位置
{
   cin >> n >> r;
   f(1, 1); // 开始选第一个数字, 从第一个位置开始
   return 0;
}


目录
打赏
0
1
1
0
30
分享
相关文章
浅聊组合函数
经历过一些列的函数式编程思想的学习总结,一些重要的高阶函数的学习,以及前一段时间关于 RxJS 的学习。
数据输出方法
【8月更文挑战第30天】
63 3
20天刷题计划-77. 组合
本题这是回溯法的经典题目。直接的解法当然是使用for循环,思路简单但效率相对没有优势,可以使用回溯搜索法,具体步骤如下 定义成全局变量便不必再当作参数传入函数 剪枝,判断当前长度和数组剩余长度能否构成一个k个数的组合 for 循环里 i 从 start 到 n。 比如,n = 5,k = 4,temp.size( ) == 1,此时代表我们还需要(4 - 1 = 3)个数字, 如果 i = 4 的话,以后最多把 4 和 5 加入到 temp 中,而此时 temp.size() 才等于 1 + 2 = 3, 不够 4 个,所以 i 没必要等于 4,i 循环到 3 就足够了。
|
9月前
|
C++
输入三个数值a,b,c,确定a,b,c能构成三角形需要同时满足三条件:a+b>c,a+c>b,b+c>a,要求编写一个用于判断输入的a,b,c能否构成三角形的程序,若能输出yes,若不能输出no
这是一段包含C++代码和运行结果的描述。代码是一个程序,用于输入三个整数并判断它们是否能构成三角形(a+b&gt;c, a+c&gt;b, b+c&gt;a)。运行结果显示了输出为&quot;YES&quot;或&quot;NO&quot;的情况。
118 0
字符串的组合
题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。 此题也可以变换为字符串的排列。 假设我们想在长度为n的字符串中求m个字符的组合。
434 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等