找出 n 个自然数(1,2,3,…,n)中 r 个数的组合。C语言
时间: 2024-09-17 08:02:21 浏览: 60
求n个数中r个数的全部组合问题
在C语言中,计算从n个自然数中选取r个数的组合可以使用计数原理(Combinatorics),也就是著名的组合公式C(n, r) = n! / [r!(n-r)!]。其中,"!"表示阶乘。这里有一个简单的C程序,使用了动态规划的思想来实现:
```c
#include <stdio.h>
// 计算阶乘
unsigned long factorial(int n) {
unsigned long fact = 1;
for (int i = 1; i <= n; ++i) {
fact *= i;
}
return fact;
}
// 计算组合数 C(n, r)
unsigned long combination(int n, int r) {
if (r == 0 || r == n) {
return 1; // 如果r等于0或n,组合就是1
} else {
return factorial(n) / (factorial(r) * factorial(n - r));
}
}
int main() {
int n, r;
printf("Enter the total count of numbers (n): ");
scanf("%d", &n);
printf("Enter the number of combinations to choose (r): ");
scanf("%d", &r);
if (r > n) {
printf("Invalid combination! r must be less than or equal to n.\n");
} else {
unsigned long result = combination(n, r);
printf("The number of ways to choose %d from %d natural numbers is %lu.\n", r, n, result);
}
return 0;
}
```
当你运行此程序,它会询问你要选择的总数n和组合数r,然后计算并打印结果。
阅读全文