當前位置:首頁 » 編程軟體 » 編程求組合C

編程求組合C

發布時間: 2022-06-17 14:17:24

A. 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;
}

B. 用C編程排列組合

#include <stdio.h>
#define MAX_NUM 26
char ach15Char[6] ="12345"; // 一定要有序的!
int comb[MAX_NUM];
void combination(int m, int n)
{
int i, j;
for (i = m; i >= n; i--)
{
comb[n] = ach15Char[i-1]; /* 選擇當前的「頭」元素 */
if (n > 1)
{
/* 進入下一次更小的組合問題 */
combination( i - 1, n - 1);
}
else
{
/* 滿了需要的組合數,輸出 */
for (j = comb[0]; j > 0; j--)
{
printf("%c", comb[j]);
}
printf("\t");
}
}
return;
}

int main(int argc, char *argv[])
{
comb[0] = 3;
combination( 5, comb[0]); /* C(15, 7) */
return 0;
}

C. VB編程題:輸入m,n的值,求組合數c(

Private Sub Command1_Click()

Dim m As Long, n As Long

m = Val(InputBox("m="))

n = Val(InputBox("n="))

If n - m < m Then m = n - m

n1 = n

f = 1

For i = 1 To m

f = f * n / i

n = n - 1

Next i

MsgBox "C(" & m & "," & n1 & ")=" & f

End Sub

D. 用自定義函數的形式 編程實現求C的組合公式

# include<stdio.h>

long mulfun (int n);

int main()

{

int M, n;

printf("please input the M and n : ");

scanf("%d %d",&M, &n);

printf("M!/n!(m!-n!) is: %d ", mulfun(M) / mulfun(n) * (mulfun(M) - mulfun(n)));


return 0;


}

long mulfun (int n) {

long mul = 1;

for (int i = 0; i < n; ++i) {

mul *= (i + 1);

}

return mul;

}



E. C語言編程求解一個排列組合問題。急!

#include<stdio.h>
#include<stdlib.h>
#include <string.h>

void process(int *,int,int);
char *s;
int size;
void main(void)
{
int n, m;
printf("Please enter n and m:");
scanf("%d%d",&n,&m);

while(n<m|| n>9)
{
if(n>9) printf("N must less than 10\n");
else printf("N must greate or equal M\n");
printf("Please enter n and m:");

scanf("%d%d",&n,&m);
}
int *p=new int[n];
s=new char[n+1];
s[0]='\0';
for(int i=0;i<n;i++)
{
p[i]=i+1;
}
process(p,m,n);
system("pause");
}

void process(int * p,int m,int n)
{

if(m==0)
{
printf("\n");

return;
}
for(int i=0;i<n;i++)
{
if(p[i]!=0){

printf("%d",p[i]);
size=strlen(s);
s[size++]=p[i]+'0';
s[size]='\0';
p[i]=0;
process(p,m-1,n);
p[i]=i+1;
size=strlen(s);
if(size>0)s[--size]='\0';
if(size>0)
{
bool isprint=false;
for (int j=i+1;j<n;j++)
{
if(p[j]!=0){
{
isprint=true;
break;
}
}
}
if(isprint)printf("%s",s);
}

}

}

}

不要意思沒加註釋,要睡覺了。有什麼不明白的再追問吧。我要sleep了。呵呵。

不好意思沒看到最後一句等效的。看來我把問題做復雜了。呵呵。

下面的代碼是在上面的基礎上改的。有些亂了,不過運行還是沒問題的。

#include<stdio.h>
#include<stdlib.h>
#include <string.h>

void process(int *,int,int,int);
char *s;
int size;
void main(void)
{
int n, m;
printf("Please enter n and m:");
scanf("%d%d",&n,&m);

while(n<m|| n>9)
{
if(n>9) printf("N must less than 10\n");
else printf("N must greate or equal M\n");
printf("Please enter n and m:");

scanf("%d%d",&n,&m);
}
int *p=new int[n];
s=new char[n+1];
s[0]='\0';
for(int i=0;i<n;i++)
{
p[i]=i+1;
}
process(p,m,n,0);
system("pause");
}

void process(int * p,int m,int n,int start)
{

if(m==0)
{
printf("\n");

return;
}
for(int i=start;i<n-m+1;i++)
{
if(p[i]!=0){

printf("%d",p[i]);
size=strlen(s);
s[size++]=p[i]+'0';
s[size]='\0';
p[i]=0;
process(p,m-1,n,i+1);
p[i]=i+1;
size=strlen(s);
if(size>0)s[--size]='\0';
if(size>0)
{
int count=0;
bool isprint=false;
for (int j=i+1;j<n;j++)
{
if(p[j]!=0){
{
isprint=true;
count++;
}
}
}
if(count==0||count<m)isprint=false;
if(isprint)printf("%s",s);
else return;
}

}

}

}

F. 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數值,可追問

G. c語言編程排列組合

void Show(int n,int len ,char str[], char p[],int *i){/*函數功能說明: 密碼窮舉法 遞歸演算法參數說明:len 密碼可選元素的個數,實際等於 strlen(str); n 密碼位數。 STR[]密碼表。 *p 密碼排列組合的臨時存檔*/int a;n--;for(a=0; a < len; a++){p[n]=str[a]; if(n==0)printf("%d:%s ",(*i)++,p); if(n0)Show(n,len , str,p,i);}} /*驅動程序 用於測試*/ int main(void){char str[]="abcdef";//密碼表 可選元素集合可根據選擇修改 int n=4;//密碼位數,根據具體應用而定。 int len=strlen(str);//用於密碼元素集合計數。 char p[20];//存放排列組合的密碼,用於輸出。 int num=0;//存放統計個數的整數值, int *i=&num;//計數器 地址。 p[n]='\0';//這個不用說啦。 printf("\n%d 位密碼,每個密碼有%d個選擇的話,共有:%d個組合。\n",n,len,*i);return 0;}
以上回答你滿意么?

H. C語言中組合公式的編程

int function(int n,int m)
{
int i, ret = 1;

for(i=0;i<m;i++)
ret *= (n-i);
return ret;
}

void main(void)
{
int n = 15, m =5;
int ret;

ret = function(15,5) / function(5,5);
printf("%d\n",ret);
}

I. 用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);
}
}

J. 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中運行,只需將頭文件更改下就可以了

熱點內容
便宜的免費雲伺服器 發布:2025-05-17 11:08:50 瀏覽:775
中國頂級dhcp解析伺服器地址 發布:2025-05-17 11:06:27 瀏覽:32
php轉義html 發布:2025-05-17 11:04:00 瀏覽:566
鋼筋籠加密區規范 發布:2025-05-17 10:59:50 瀏覽:3
我的世界網易手機版主播伺服器房號 發布:2025-05-17 10:40:59 瀏覽:226
豎編譯 發布:2025-05-17 09:56:08 瀏覽:227
編程畫飛機 發布:2025-05-17 09:54:03 瀏覽:801
手機如何解鎖密碼屏幕鎖怎麼刪除 發布:2025-05-17 09:52:04 瀏覽:123
網路無法訪問網頁 發布:2025-05-17 09:51:40 瀏覽:649
雲存儲box估值 發布:2025-05-17 09:47:11 瀏覽:512