Ⅰ 急求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大演算法是什麼
貌似沒這么一說哈,我們學演算法設計與分析時,演算法數量絕對兩位數以上,而且演算法不分語言,例如,人工智慧書上,大神級的人物寫書都是使出自己吃奶得勁避免由於語言的差異產生的麻煩,所以全用偽代碼,而且相當的「偽」,有的甚至要直接用自然語言敘述演算法,所以演算法不分語言!
------------------------------------------------------------------------------
想了解演算法的話,你可以找本演算法的書來看一下,推薦:《演算法設計與分析》清華大學出版社,呂國英主編,講的很好..............