編程計算組合數
#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);
}
}
② c語言編程問題,計算出從n 個不同元素中取出m 個元素(m≤n)的組合數。編寫程序
#include<stdio.h>
double fact(double s)
{
double i,a=1;
for (i=1;i<=s;i++)
a=a*i;
return a;
}
int main()
{
double x,y,m,n;
printf("Enter m: ");
scanf("%lf",&m);
printf("Enter n: ");
scanf("%lf",&n);
y=fact(n-m);
m=fact(m);
n=fact(n);
x=n/(y*m);
printf("result=%.0f",x);
return 0;
}
③ 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中運行,只需將頭文件更改下就可以了
④ C語言,計算組合數C(A,B)
#include <stdio.h>
double fact(int n);
int main()
{
int i,j,m,n;
double C;
printf("Enter in:
");
scanf("%d %d",&m,&n);
C = fact(n)/(fact(m)*fact(n-m));
printf("The result of C(m,n) is %.1f:
",C);
return 0;
}
double fact(int n)
{
int i;
double termainate;
termainate=1;
for(i=1;i<=n;i++)
{
termainate *= i;
}
return termainate;
}
⑤ C語言編程:按所給的公式計算組合數並輸出結果:Cmn(m在上n在下)=n!/[(n-m)!m!]
我理解是這樣的輸入輸出,如果是這樣的輸入輸出的話,代碼如下:
#include<stdio.h>
#defineN34
main()
{
inti,j,a[N][N],n;
for(i=0;i<N;i++)
a[i][0]=a[i][i]=1;
for(i=2;i<N;i++)
{
for(j=1;j<i;j++)
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
for(i=0;i<N;i++)
while(scanf("%d",&n),n>=0)
{
for(i=0;i<n;i++)
printf("%d",a[n][i]);
printf("%d ",a[n][n]);
}
return0;
}
⑥ C語言編程實現求組合數P=C(n,k)的值
double lnchoose(int n, int m)
{
if (m > n)
{
return 0;
}
if (m < n/2.0)
{
m = n-m;
}
double s1 = 0;
for (int i=m+1; i<=n; i++)
{
s1 += log((double)i);
}
double s2 = 0;
int ub = n-m;
for (int i=2; i<=ub; i++)
{
s2 += log((double)i);
}
return s1-s2;
}
double choose(int n, int m)
{
if (m > n)
{
return 0;
}
return exp(lnchoose(n, m));
}
用之前調用math.h頭文件,用的話直接把值賦給choose()這個函數即可,直接調用上面的函數,返回一個double數值,可追問
⑦ 計算組合數 如何編程
如果是指從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);
}
用的是C語言
⑧ 編程高手進~~~用C++編程計算組合數的值
#include <iostream>
using namespace std;
int fac(int m,int k);
int main()
{
int m,k;
cout <<"輸入m,k:\n";
cin>>m>>k;
while(1){
if(m<k){
cout <<"m,k的取值不正確,請重新輸入\n";
cin>>m>>k;
}
else break;
}
cout <<"m的k的組合數為:"<<fac(m,k)<<endl;
return 0;
}
int fac(int m,int k){
if(m<k)return -1;
int a=1,b=1,c=1;
for(int i=m;i>=1;i--)
a*=i;
for(int j=k;j>=1;j--)
b*=j;
for(int l=m-k;l>=1;l--)
c*=l;
return a/(b*c);
}
⑨ 編寫程序 計算組合數的公式
var s,i,j,n:integer;
begin
readln(n);
s:=0;
for i:=1 to n do read(a[i]);
for j:=1 to n do s:=s+a[j];
writeln(n);
end.
⑩ 組合數編程
可以將結果加一個小數,如0.0000001,然後再處理就沒問題了。