用c语言写出排列数从大到小
时间: 2024-10-25 17:06:38 浏览: 18
C语言实现输入一个字符串后打印出该字符串中字符的所有排列
在C语言中,计算组合数(也称为排列数,因为对于排列,顺序是有意义的)通常涉及到阶乘运算。组合数可以用n! / (r!(n-r)!)的公式表示,其中n是总数,r是从总数中选择的数量。这里有一个简单的函数,使用递归的方式来计算排列数并按照降序排列:
```c
#include <stdio.h>
#include <math.h>
// Function to calculate factorial
unsigned long long factorial(int n) {
if (n == 0 || n == 1)
return 1;
else
return n * factorial(n - 1);
}
// Function to calculate permutation
unsigned long long permutation(int n, int r) {
if (r > n)
return 0; // Invalid combination
else
return factorial(n) / factorial(n - r);
}
// Sort permutations in descending order and print them
void sort_and_print(int n, int k) {
unsigned long long perm[n + 1][k + 1];
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= min(i, k); j++) {
perm[i][j] = permutation(i, j);
}
}
qsort(perm, n + 1, sizeof(unsigned long long), compare_descending);
printf("Permutations from largest to smallest:\n");
for (int i = n; i >= 0; i--) {
for (int j = 0; j <= min(i, k); j++) {
printf("%llu ", perm[i][j]);
}
printf("\n");
}
}
// Compare function for sorting in descending order
int compare_descending(const void *a, const void *b) {
return (*(unsigned long long *) b - *(unsigned long long *) a);
}
int main() {
int n = 5, k = 3; // Example values for total elements and choices
sort_and_print(n, k);
return 0;
}
```
在这个示例中,`sort_and_print`函数首先计算所有可能的排列数,并存储在一个二维数组中。然后它使用`qsort`函数对这个数组按降序排序,最后打印出结果。
阅读全文