编一个最简单易懂的程序,求n个数中r个组合,输出组合数

编一个最简单易懂的程序,求n个数中r个组合,输出组合数,第1张

以前写过类似的,可以参考一下哈

/*

5. 从五种颜色的球中选出3个,输出每种可能的组合数。要求:

1) 定义枚举类型enum Color{Yellow, Blue, Black, Red, Green}

2) 编写函数void Display( Color c), //输笑贺出枚举常量c所对应的颜色字符串。如:租磨c==Yellow时碰型派,则输出”Yellow”字符串

3) 编写函数void combination(int n,int k),实现从n个球中选出k个球的所有组合数。在此函数中调用函数Display(),输出每种组合所对应的颜色,如:

red yellow blue

red yellow black

……*/

#include <stdio.h>

#include <stdlib.h>

enum Color{Yellow, Blue, Black, Red, Green}

//定义一个辅助数组,用来临时存放每一种组合结果

int temp[100]

void Display(enum Color c)

{

switch(c)

{

case Yellow:

printf("Yellow ")

break

case Blue:

printf("Blue ")

break

case Black:

printf("Black ")

break

case Red:

printf("Red ")

break

case Green:

printf("Green ")

break

}

}

//通过递归实现 num记录抽取球的个数,开始的时候num=k

void combination(int n,int k,const int num)

{

int i,j

for(i=ni>=ki--)

{

temp[k-1] = i-1//记录一个位置

if(k>1)

combination(i-1,k-1,num)

else

{

for(j=num-1j>=0j--)

Display(temp[j])

printf("\n")

}

}

}

int main()

{

combination(5,3,3)

system("pause")

return 0

}

这是由于阶胡慧碧裤举乘数很大。在计算碧橘的中间过程,int类型溢出了。

可以把

int xjc = 1, yjc = 1,zjc = 1

改为

double xjc = 1, yjc = 1,zjc = 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)


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存