能用C编写一道数据结构的题么?如下。。
设m.n均为自然数,m可表示为一些不超过n的自然数之和,f(m,n)为这种表示方式的数目。例f(5,3)=5,有5种表示方法:1+1+1+1+1;1+1+1+2;1+2+...
设m.n均为自然数,m可表示为一些不超过n的自然数之和,f(m,n)为这种表示方式的数目。例f(5,3)=5,有5种表示方法:1+1+1+1+1;1+1+1+2;1+2+2;1+1+3;3+2.
试编写函数f(m,n)计算这种表示方法的数目。
用C编写哈~ 展开
试编写函数f(m,n)计算这种表示方法的数目。
用C编写哈~ 展开
1个回答
展开全部
#include<stdio.h>
main(){
int i,m,n;
char c;
for(i=0;;i++){ clrscr();
printf("\n\t input m,n:");
scanf("%d,%d",&m,&n);
printf("\t%d\n\tany other key to contine......('q'for exit)",f(m,n));
c=getch();
if(c=='q')break;
}
getch();
}
int f(int m,int n){
int SUM=0;
if(n==1)SUM=1;
else if(n<1)SUM=0;
else{
if(m<=n){SUM+=1;n=m-1;SUM+=f(m,n);}
else {SUM=f(m-n,n)+f(m,n-1);}/*通篇只有这一个关键步骤:后面是讲解*/
}
return SUM;
}
/*
例如:f(7,2)=4 & f(7,3)=
f(7,2)
1+1+1+1+1+1+1=7
2+1+1+1+1+1=7
2+2+1+1+1=7
2+2+2+1=7
3+ 1+1+1+1 =7
3+ 2+1+1 =7
3+ 2+2 =7
3+ 3+1 =7
f(7,3)=8
注意:两个相差的部分就是在小于3的范围内求4;即:f(7-3,3);
*/
main(){
int i,m,n;
char c;
for(i=0;;i++){ clrscr();
printf("\n\t input m,n:");
scanf("%d,%d",&m,&n);
printf("\t%d\n\tany other key to contine......('q'for exit)",f(m,n));
c=getch();
if(c=='q')break;
}
getch();
}
int f(int m,int n){
int SUM=0;
if(n==1)SUM=1;
else if(n<1)SUM=0;
else{
if(m<=n){SUM+=1;n=m-1;SUM+=f(m,n);}
else {SUM=f(m-n,n)+f(m,n-1);}/*通篇只有这一个关键步骤:后面是讲解*/
}
return SUM;
}
/*
例如:f(7,2)=4 & f(7,3)=
f(7,2)
1+1+1+1+1+1+1=7
2+1+1+1+1+1=7
2+2+1+1+1=7
2+2+2+1=7
3+ 1+1+1+1 =7
3+ 2+1+1 =7
3+ 2+2 =7
3+ 3+1 =7
f(7,3)=8
注意:两个相差的部分就是在小于3的范围内求4;即:f(7-3,3);
*/
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询