社区讨论

求助!输出超限,有哪位大佬能看一下,谢谢

题目总版参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lzc9kwvk
此快照首次捕获于
2024/08/02 13:28
2 年前
此快照最后确认于
2024/08/02 14:31
2 年前
查看原帖
CPP
#include<bits/stdc++.h>  
using namespace std;  
int ans[50], a[100]; 
int r,n;  
  
void kfc(int p) {  
    if (p>r) {  
 
        for (int i=1; i<=r;i++) {  
            printf("%3d", ans[i]);  
        }  
 
    } else {  
        for (int i=1;i<=n;i++) { 
            if (a[i]==0) {  
                a[i]=1; 
                ans[p]=i; 
                kfc(p+1);  
                a[i]=0;
            }  
        }  
    }  
}  
  
int main() {  
    cin >> n >> r;  
    memset(a, 0, sizeof(a)); 
    kfc(1);
    return 0;  
}
题目: 排列与组合是常用的数学方法,其中组合就是从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

回复

2 条回复,欢迎继续交流。

正在加载回复...