double?fact(long?num)
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:空間域名、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、子洲網(wǎng)站維護、網(wǎng)站推廣。
{
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("請輸入兩個整數(shù),以0,0結(jié)束\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);
}
}
實現(xiàn)的算法很多, 下面給出一個不需要遞歸的算法; 需要設(shè)計兩個函數(shù)。
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、求排列組合沒有簡單方法。方法只有一個,枚舉。有幾個位置需要列舉,就需要幾個循環(huán)。如果循環(huán)數(shù)量太多,可以用函數(shù)遞歸來枚舉。
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("組合數(shù)=%f",zuheshu=(jiecheng(n)/(jiecheng(r)*jiecheng(n-r))));
} 這是在VC++環(huán)境中編的,如果在tuboC中運行,只需將頭文件更改下就可以了