数学里的Cnm用C语言怎么表示

如题所述

希望能帮到你。来自http://blog.sina.com.cn/s/blog_64b236da0100vg33.html

#include <stdio.h>
#include <stdlib.h>
//从n个元素的数组a中,取m个元素的组合
bool zuhe(char a[],int n,int m)
{//p[x]=y 取到的第x个元素,是a中的第y个元素
int index,i,*p;

p=(int*)malloc(sizeof(int)*m);
if(p==NULL)
{
return false;
}
index=0;
p[index]=0;//取第一个元素
while(true)
{
if(p[index]>=n)
{//取到底了,回退
if(index==0)
{//各种情况取完了,不能再回退了
break;
}
index--;//回退到前一个
p[index]++;//替换元素
}
else if(index==m-1)
{//取够了,输出
for(i=0;i<m;i++)
{
printf("%c",a[p[i]]);
}
printf("\n");
p[index]++; //替换元素
}
else
{//多取一个元素
index++;
p[index]=p[index-1]+1;
}

}
free(p);
return true;
}
//对n个元素的数组a,进行全排列
bool pailie(char a[],int n)
{//p[x]=y 取到的第x个元素,是a中的第y个元素
int i,j,temp,*p;

p=(int*)malloc(sizeof(int)*n);
if(p==NULL)
{
return false;
}
for(i=0;i<n;i++)
{//初始排列
p[i]=i;
}
while(true)
{//循环m=n!次
//输出一种排列情况
for(i=0;i<n;i++)
{
printf("%c",a[p[i]]);
}
printf("\n");
//从后向前查找,看有没有后面的数大于前面的数的情况,若有则停在后一个数的位置。
for(i=n-1;i>0 && p[i]<p[i-1];i--);

//若没有后面的数大于前面的数的情况,说明已经到了最后一个排列,返回
if(i==0) break;

//从后查到i,查找大于p[i - 1]的最小的数,记入j
for(j=n-1;j>i && p[j]<p[i-1];j--);

//交换p[i-1]和p[j]
temp=p[i-1];p[i-1]=p[j];p[j]=temp;

//倒置p[i]到p[n-1]
for(i=i,j=n-1;i<j;i++,j--)
{//交换p[c]和p[d]
temp=p[i];p[i]=p[j];p[j]=temp;
}
}
free(p);
return true;
}
int main()
{
char a[]="ABCD";

zuhe(a,4,2);//组合
pailie(a,3);//排列
return 0;
}追问

。。。。。

追答

怎么了?

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-12
昨天才回答了这个问题,这个可以
#include<stdio.h>

int cmd(int m, int n);

int main()
{
int m, n;
scanf("%d%d", &m, &n);
int r = cmn(m, n);
printf("%d\n", r);
}

int cmn(int m, int n)
{
int r = 1;
int i;
for(i=1; i<=m; ++i)
r *= i;
for(i=1; i<=n; ++i)
r /= i;
for(i=1; i<=m-n; ++i)
r /= i;

return r;
}追问

math.h里没有专门的已经定义好了的函数?

本回答被提问者采纳
第2个回答  2013-11-12
要用方法去实现。
需要代码的话,再说。其实这个逻辑也不难

数学里的Cnm用C语言怎么表示
for(i=i,j=n-1;i<j;i++,j--){\/\/交换p[c]和p[d]temp=p[i];p[i]=p[j];p[j]=temp;} } free(p);return true;

如何用c语言表示数学里的无限循环?
得到的公式就是Cnm = n! \/ [(n-m)! * m!]

c语言中什么是C(n, m)?
大写字母C,下标n,上标m,表示从n个元素中取出m个元素的不同的方法数.如从5个人中选2人去开会,不同的选法有C(5,2)=10种。C(n,m)的计算方法是C(n,m)=n!\/[m!(n-m)!]=n*(n-1)*...*(n-m+1)\/[1*2*...*m],如C(5,2)=[5*4]\/[1*2]=10。

c语言中m表示什么?
C(n,m) ---n是下标 , m是上标 (C上面m,下面n),C(n,m) 表示 n选m的组合数,等于从n开始连续递减的m个自然数的积除以从1开始连续递增的m个自然数的积。例子:C(8,3)=8*7*6\/(1*2*3) =56 分子是从8开始连续递减的3个自然数的积 分母是从1开始连续递增的3个自然数的积 ...

C语言、输入一个整数m,求m的n次方根,卜用数学函数``
void main() { int m,n; double p,s; int i; printf("请输入整数m和n次方:"); scanf("%d%d",&m,&n); for(p=1.0;p<=sqrt(m);p+=0.000001) { s=1.0; for(i=0;i<n;i++) s*=p; if(m-s<1e-6) { printf("%lf\\n",p); break; } } } 采纳哦 ...

求C语言中各种数学符号怎么表达?
表头文件 #include<stdlib.h> 定义函数 int abs (int j)函数说明 abs()用来计算参数j的绝对值,然后将结果返回。返回值 返回参数j的绝对值结果。范例 #ingclude <stdlib.h> main(){ int ansert;answer = abs(-12);printf("|-12| = %d\\n", answer);} 执行 |-12| = 12 \/*...

如何表达c语言中的数学符号啊。怎么办?
asin()求反正弦 atan()求反正切 atan2()求反正切,按符号判定象限 ceil()求不小于某值的最小整数(求上界)cos()求余弦 cosh()求双曲余弦 div()求商和余数 exp()求e的幂 fabs()求浮点数的绝对值 floor()求不大于某值的最大整数(求下界)fmod()求模数 frexp()求数的科学表明法形式 labs...

c语言怎么用三角函数
开头必须有一个数学函数库 #include<math.h> 然后一般常用的sin(x)cos(x)tan(x)其中的x必须要以弧度为单位。如果以“度”为单位,比如说求30度的正弦值,要用sin(x*180\/3.1415926)的形式arcsin(x)arccos(x)arctan(x)arccot(x)以上四个则是相应的反三角函数,函数值的单位也是弧度。若要求...

C语言中的数学计算方法有哪些?
C语言中除了使用函数pow实现乘方运算,没有其他的运算符号可以用来直接表示乘方,就算自己实现也只能是以函数的形式体现出来。1、C语言中计算一个数的N次方可以用库函数pow来实现,还可以直接使用2^3就可以算出结果。pow函数原型:double pow(double x,double y)。其中x值是底数,y值是幂。举例:double...

如图,C语言如何表示这个数学数字?
代码的头文件中加入数学的库函数#include<math.h>,这个数字可以表示为log(10)\/log(1)

相似回答