組合數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
道理你該明白