问题引入
解:据题目可知有50个人中两两握手,那就意味着可以通过计算从50个元素中选取2个元素的组合数C(50,2)
依据组合数公式 可以计算C(50,2)
用c语言表示
#include <stdio.h>
int main() {
int people = 50;
int not_people = 7;
int total = people * (people - 1) / 2;
int not_total = not_people * (not_people - 1) / 2;
printf("%d", total - not_total);
return 0;
}
最终打印结果为1204次握手
由此题我们可以回顾组合数的相关运算在c语言中如何表示
拓展
在c语言中进行组合数计算,如果遇到过大的数字时,直接计算该数字的阶乘代入公式的话可能导致数值溢出问题,所以,为了避免该问题,在计算组合数问题时可以采用逐步计算的方式通过循环计算分子和分母来避免直接计算阶乘导致的数值溢出问题,接下来为代码演示
#include <stdio.h>
long long comb(int n, int k) {
//如果选取的元素比选取元素的范围还大就返回0
if (k > n) return 0;
if (k == 0 || k == n) return 1;
long long result = 1;
for (int i = 1; i <= k; i++) {
result = result * (n - k + i) / i;
}
return result;
}
int main() {
int n = 50;
int k = 3;
long long c = comb(n, k);
printf("C(%d, %d) = %lld\n", n, k, c);
return 0;
}