组合数c语言
A. 计算组合数 c语言
如果是指从m个不同元素中取出n(n≤m)个元素的所有组合的个数 的话
#include"stdio.h"
int fac(int n) /*阶乘函数*/
{
int s,i;
s=1;
for(i=1;i<=n;i++)
{
s*=i;
}
return(s);
}
main()
{
int n,m,c;
scanf("%d %d",&m,&n);
c=fac(m)/(fac(n)*fac(m-n));
printf("%d\n",c);
}
B. 用C语言求组合数
实现的算法很多, 下面给出一个不需要递归的算法; 需要设计两个函数。
unsigned long factorial (unsigned long n);
long long perm(unsigned long m, unsigned long n);
unsigned long factorial (unsigned long n)
{
unsigned long value = (n == 0) ? 1 : n;
while( n >= 2 )
value *= --n;
return value;
}
long long perm(unsigned long m, unsigned long n)
{
if (m > n)
return -1;
else
return (unsigned long) (factorial(n)/factorial(n-m));
}
只为了m>n就要返回-1, 有点浪费啊~~~
注意求值范围, 如果需要可以int64扩展。。。
C. 用c语言编程,求组合数!
#include <stdio.h>
void main()
{
void choose(int a,int b);
int a,b,c,d;
printf("请输入两个整数,以0,0结束\n");
scanf("%d,%d",&a,&b);
scanf("%d,%d",&c,&d);
if(c==0&&d==0)
choose(a,b);
}
void choose(int a,int b)
{
if(b>a)
{
printf("error!");
}
else
{
int fenmu=b,fenzi=a;
for(int i=a-1;i>a-b;i--)
fenzi*=i;
for(int j=b-1;j>1;j--)
fenmu*=j;
int temp;
temp=fenzi/fenmu;
printf("%d",temp);
}
}
D. 一个关于组合数的C语言问题(求代码)。
这是个排列问题吧,如果5个不同的数不包含0,则其可以组成的数的个数有:
P(5,1)+P(5,2)+P(5,3)+P(5,4)+P(5,5)
P(n,m)表示n取m的排列,P(n,m)=n*(n-1)*(n-2)*...*(n-m+1)
写程序循环连乘、累加即可。
E. c语言编程,组合数
#include<iostream>
using namespace std;double jiecheng(int n)
{
if(n==0)
return 0;
if(n==1)
return 1;
double m=n;
while(!(n<2))
{
m=m*(n-1);
n--;
}
return m;
}main()
{
int n,r;
double zuheshu;
printf("请输入n和r(n>1且r<=n):\n");
scanf("%d%d",&n,&r);
printf("组合数=%f",zuheshu=(jiecheng(n)/(jiecheng(r)*jiecheng(n-r))));
} 这是在VC++环境中编的,如果在tuboC中运行,只需将头文件更改下就可以了
F. c语言 组合数
不是很明白你要进行什么运算,但是最后一个return敲错了
G. c语言的这个组合数怎么编程序呢,
由于数据比较大,你不能通过组合数的计算公式C(m,n)=m!/(n!(m-n)!)直接来求(因为会溢出),可以根据C(m,n)=C(m-1,n)+C(m-1,n-1),C(i,0)=1,c(i,i)=1来求,用a[i][j]来表示C(i,j),通过循环求出来C(m,n)
#include<stdio.h>
inta[101][101];
intmain()
{
intm,n,i,j;
scanf("%d%d",&m,&n);
for(i=0;i<=100;i++)//初始化C(i,0)=1,C(i,i)=1
{
a[i][0]=1;
a[i][i]=1;
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];//循环
}
}
printf("%d ",a[m][n]);
return0;
}
H. C语言求组合数
doublefact(longnum)
{
for(longi=1;num>0;num--)
{
i*=num;
}
}
intmain()
{
longm;
longn;
longC;
scanf("%ld%ld",&m,&n);
C=fact(n)/((fact(m))*fact(n-m));
printf("%ld",C);
return0;
}
I. C语言【求组合数】
这个题目的数学公式可以简化,n比m小
判断n和m-n谁大,业绩是n是否大于m/2
这样可以计算,如果n>m/2
m*(m-1)*...*(n+1)除以(m-n)*(m-n-1)*....*2
道理你该明白