用c语言找出n个自然数(1,2,3,....,n)中取r个数的组合。
时间: 2023-05-29 17:05:26 浏览: 113
以下是一种用递归方法实现的C语言程序:
```c
#include <stdio.h>
void printCombination(int arr[], int n, int r, int index, int data[], int i) {
if (index == r) {
for (int j = 0; j < r; j++) {
printf("%d ", data[j]);
}
printf("\n");
return;
}
if (i >= n) {
return;
}
data[index] = arr[i];
printCombination(arr, n, r, index+1, data, i+1);
printCombination(arr, n, r, index, data, i+1);
}
int main() {
int n = 5, r = 3;
int arr[n];
for (int i = 0; i < n; i++) {
arr[i] = i+1;
}
int data[r];
printCombination(arr, n, r, 0, data, 0);
return 0;
}
```
这个程序通过递归的方式生成了所有的组合。其中,参数`arr`是包含所有自然数的数组,参数`n`是数组的长度,参数`r`是需要选取的数的个数,参数`index`表示当前已经选取了多少个数,参数`data`是已经选取的数的数组,参数`i`是当前正在考虑的数的下标。
在递归函数中,如果已经选取了`r`个数,就打印出来并返回;如果已经考虑完了所有的数,就返回;否则,可以选择当前数,也可以不选择当前数,分别递归处理这两种情况。
阅读全文