c 语言 求组合数

c 语言 求组合数,第1张

你用的卖仔差是递规,爆栈了。

#include<中皮stdio.h>

unsigned int C(unsigned int n,unsigned int r)

int main()

{

unsigned int n,r,i

for(i=0scanf("%d%d",&n,&r)!=EOFi++)

{

if(n==0&&r==0)

{

break

}

if(n<r)

{printf("error!\n"戚镇)}

else

printf("%d\n",C(n,r))

}

return 0

}

unsigned int C(unsigned int n,unsigned int r)

{

unsigned int i,ans[100]

if(r==0)return 1

if(r==1)return n

ans[0]=1,ans[1]=n

for(i=2i<=ri++)

{

ans[i]=ans[i-1]*(n-i+1)/i

}

return ans[r]

}

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

/*

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

}

Scanner  sc = new Scanner(System.in)

int numA=4//排列4个

int numC=3//组卖烂合3个

System.out.println("请信薯输入四个个位数:")

List<Integer> list = new ArrayList<>()

for (int i = 0 i < numA i++) {

System.out.printf("第%d个:",i+1)

list.add(sc.nextInt())

}

int a=1

int b=1

for (int i = 0 i < numC i++) {

a=a*(numA-i)

b=b*(i+1)

}

System.out.println("组合数为:"+a/b)

如果是四个中坦漏不同的数的话是这样


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

原文地址: https://outofmemory.cn/yw/12545337.html

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

发表评论

登录后才能评论

评论列表(0条)

保存