Ⅰ 急求C语言编辑题:Cnm=n!/m!(n-m)!其中n,m 由键盘输入。要求设计一个函数fac(n)求某个正整数n 的阶乘。
//用递归函数处理
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
long int fac(int n)
{
long int sum=0;
if(n==1)
sum=1;
else
sum=n*fac(n-1);
return sum;
}
void main()
{
long int c=0;
int n,m;
printf("please input n=");
scanf("%d",&n);
printf("please input m=");
scanf("%d",&m);
if((n<0)||(m<0)||((n-m)<0))
{
printf("input num is error\n");
}
else
{
c=fac(n)/fac(m)/fac(n-m);
printf("%ld\n",c);
}
}
Ⅱ 数学里的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;
}
Ⅲ 求数据结构 c语言算法代码
满二叉树计算结点个数的公式是2^n-1.
条件:满二叉树的结点个数为20到40之间的素数
通过判断得知n=5成立·也只有n等于5的时候结果才在20到40之间·因为n=5,所以二叉树的叶结点的个数为2^(n-1)=2^4=16个
n是树的层次
代码你就自己写吧,说的已经很明白了
Ⅳ c语言算法
#include <stdio.h>
int main()
{
int i, j;
int res = 0;
for (i = 3; i <= 200; i += 2)
{
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
res += i;
break;
}
}
}
printf("%d\n", res);
return 0;
}
Ⅳ 求C语言新手学的算法
建议去看看刘如佳的《算法竞赛入门经典》这本书,讲了很多的基础算法,很是算法初学者。希望你对你有所帮助。
Ⅵ 常用的C语言算法有哪些
算法是一个自成体系的东西,和c语言没有本质联系。
而且算法是为了解决问题的,所以也就无所谓常用不常用。
如果你的程序需要排序功能,那么排序就算常用算法,排序算法有冒泡,快速和归并等。
Ⅶ 用C++编程输出Cnm的值。Cnm=m!/(m-n)!n!
Cnm真的不用算3个阶乘,真的按照公式来反而麻烦了。
Cnm就是从m往下乘n个数然后除以n的阶乘。
int C(int n, int m)
{
if(n>m/2)
return C(m-n, m);
if(n==0)
return 1;
int x=1,y=1;
for(int i=0;i<n;i++)
{
x*=m-i;
y*=i+1;
}
return x/y;
}
Ⅷ C语言的9大算法是什么
貌似没这么一说哈,我们学算法设计与分析时,算法数量绝对两位数以上,而且算法不分语言,例如,人工智能书上,大神级的人物写书都是使出自己吃奶得劲避免由于语言的差异产生的麻烦,所以全用伪代码,而且相当的“伪”,有的甚至要直接用自然语言叙述算法,所以算法不分语言!
------------------------------------------------------------------------------
想了解算法的话,你可以找本算法的书来看一下,推荐:《算法设计与分析》清华大学出版社,吕国英主编,讲的很好..............