如何在Excel中做组合数,并显示出来?

如何在Excel中做组合数,并显示出来?,第1张

1.首先,看一下原始数据。A1和A2是两个主等级,B1:B4是四个附属等级,每个主等级都有四个附属等级。需要在C列显示出所有的组合情况。

2.考虑用INDEX函数来实现这个功能。首先来看一下INDEX第二参数如何做。

双击C1,输入公式=INT((ROW(A1)-1)/4)+1,下拉可以看到1出现了4次,2也出现了4次,这是因为B列困陵歼数据4次以后就需要在A列偏移一个单元格。

3.外面嵌套INDEX函数,输入:

=INDEX($A$1:$A$2,INT((ROW(A1)-1)/4)+1)

下拉后就可以看到“汪冲一等”和“二等”各出现了4次。

4.第二列数据和第一列数据不一样,我们需要循环引用B列的数据。也汪老就是让1,2,3,4循环出现。所以我们考虑用MOD函数。双击D1,输入公式:

=MOD(ROW(A1)-1,4)+1

下拉后我们可以看到如下图的效果:

5.同样,外层嵌套INDEX函数,可以循环获得B列的数据,4行一遍:

=INDEX($B$1:$B$4,MOD(ROW(A1)-1,4)+1)

6.最后,把公式合并在一个单元格中,就生成了最终结果组合。

=INDEX($A$1:$A$2,INT((ROW(A1)-1)/4)+1)&INDEX($B$1:$B$4,MOD(ROW(A1)-1,4)+1)

不用递归则可以用 公式的呀,从n个元素中选取m个(n>=m)的组合数,公式如下。

C(n, m) = n!/(m! * (n-m)!)

而m!和(n-m)!两者中的较大一个可以和n!的前若干项约分掉,我们不妨设n-m >m,笑核饥则(n-m)!可以被碰返约掉,只要求m!和 (n-m+1)*...*n即可。然后将这两个连乘积相除,即为组合数。

程序可如下:

#include <stdio.h>

void main( )

{

int n, m, max, min, i, s = 1, r = 1

scanf("%d%d", &n, &m)

max = (m >(n-m) ? m : (n - m))

min = n - max

for(i = 1i <= mini++)

r *= i,  s *= (max + i)

printf("C(%d,%d) = %d\n", n, m, s / r)  /*max的阶乘可以约掉,所以不必求氏凯*/

}

运行结果:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12417556.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存