当前位置:首页 » 编程软件 » 编程求组合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中运行,只需将头文件更改下就可以了

热点内容
sql数据溢出 发布:2025-05-17 04:55:14 浏览:731
java金额 发布:2025-05-17 04:51:48 浏览:288
安卓怎么下应用 发布:2025-05-17 04:46:52 浏览:554
算法健壮性 发布:2025-05-17 04:41:10 浏览:856
jquery文件上传进度条 发布:2025-05-17 04:39:50 浏览:221
信息技术脚本模板 发布:2025-05-17 04:39:00 浏览:258
写sql跑 发布:2025-05-17 04:38:58 浏览:252
openharmony编译依赖 发布:2025-05-17 04:32:45 浏览:610
什么叫双十一配置 发布:2025-05-17 04:14:31 浏览:979
翼状胬肉使用氟尿嘧啶怎么配置 发布:2025-05-17 04:14:24 浏览:976