新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
double fact(long num)
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、雅安服务器托管、营销软件、网站建设、子洲网站维护、网站推广。
{
for (long i = 1; num 0; num--)
{
i *= num;
}
}
int main()
{
long m;
long n;
long C;
scanf("%ld %ld", m, n);
C = fact(n) / ((fact(m)) * fact(n-m));
printf("%ld",C);
return 0;
}
#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==0d==0)
choose(a,b);
}
void choose(int a,int b)
{
if(ba)
{
printf("error!");
}
else
{
int fenmu=b,fenzi=a;
for(int i=a-1;ia-b;i--)
fenzi*=i;
for(int j=b-1;j1;j--)
fenmu*=j;
int temp;
temp=fenzi/fenmu;
printf("%d",temp);
}
}
实现的算法很多, 下面给出一个不需要递归的算法; 需要设计两个函数。
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));
}
只为了mn就要返回-1, 有点浪费啊~~~
注意求值范围, 如果需要可以int64扩展。。。
1、求排列组合没有简单方法。方法只有一个,枚举。有几个位置需要列举,就需要几个循环。如果循环数量太多,可以用函数递归来枚举。
2、例程:
#includestdio.h
int main(){
int a[4]={1,3,4,7}; //第一个位置
int b[4]={2,5,8,10}; //第二个位置
int c[4]={6,9,11,12}; //第三个位置
int i,j,k;
for(i=0;i4;i++)
for(j=0;j4;j++)
for(k=0;k4;k++)
printf("%d %d %d\n,",a[i],b[j],c[k]);//输出一种排列
getch();
return 0;
}
#includeiostream
using namespace std;double jiecheng(int n)
{
if(n==0)
return 0;
if(n==1)
return 1;
double m=n;
while(!(n2))
{
m=m*(n-1);
n--;
}
return m;
}main()
{
int n,r;
double zuheshu;
printf("请输入n和r(n1且r=n):\n");
scanf("%d%d",n,r);
printf("组合数=%f",zuheshu=(jiecheng(n)/(jiecheng(r)*jiecheng(n-r))));
} 这是在VC++环境中编的,如果在tuboC中运行,只需将头文件更改下就可以了