求助一道问题

Timmy_Y 2012-05-15 02:18:39
46 求表示方法
成绩: 10 / 折扣: 0.8
设 m、n 均为自然数,m 可表示为一些不超过 n 的自然数之和,f(m,n) 为这种表示方式的数目。

例如,f(5,3)=5,有5种表示方法:3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1。

请编写程序,计算f(m,n)的值。

输入:
m n

输出:
f(m,n)的值

同学告我用递归做,可我找不到数学思路,求帮助,高手们告诉我个思路也行,麻烦了
...全文
181 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
晚安苏州 2012-05-15
  • 打赏
  • 举报
回复

最里面的判断应该是这样5改成m
if(value==m-s*i)
{
time++;
}
Timmy_Y 2012-05-15
  • 打赏
  • 举报
回复
不过我好像确实做得不对,人家毕竟帮我想程序了,下次我会每个人都给一些,这次不好意思,我太随便了
Timmy_Y 2012-05-15
  • 打赏
  • 举报
回复
我不是来转分的,只是没有满意答复,就随便给了
晚安苏州 2012-05-15
  • 打赏
  • 举报
回复
貌似这样也可以哦~:

#include <iostream>
using namespace std;
int time=0;
int value=1;

int main()
{
void recursion(int m,int n);
recursion(5,4);
cout<<time<<endl;
return 0;
}
void recursion(int m,int n)
{
for(int s=0;s<(n+1)/2;s++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<m;j++)
{
value=i+j*1;
if(value==5-s*i)
{
time++;
}
}
}
}
}
aCracker 2012-05-15
  • 打赏
  • 举报
回复
楼主难道是来转分的???????
我擦
Timmy_Y 2012-05-15
  • 打赏
  • 举报
回复
f(5,3)为什么等于两个表达式呢
Timmy_Y 2012-05-15
  • 打赏
  • 举报
回复
4楼,求你再解释的清楚一些好吗,没太看明白
daviddb7 2012-05-15
  • 打赏
  • 举报
回复
给数学思路:
f(5,3)=f(4,3)+f(1,3)
f(5,3)=f(3,3)+f(2,3)

...

f(1,x)=1


TROYWANGMIAO 2012-05-15
  • 打赏
  • 举报
回复
那个啥意思
aCracker 2012-05-15
  • 打赏
  • 举报
回复
尼玛,研究这个,看了半天才看懂.
成绩: 10 / 折扣: 0.8

顺便膜拜2楼,佩服3楼.
W170532934 2012-05-15
  • 打赏
  • 举报
回复

int x;
static int a[1000],k=0,t=0;

void prt(){
int i,s=0;
t=0;
for(i=0;i<k;i++)
s=s+a[i];
if(s==x){
for(i=0;i<k;i++)
if(i<k-1) printf("%d+",a[i]);
else printf("%d",a[i]);
printf("\n");
t=1;
}
}

int q(int n,int m){
int i;
int s1,s2;
if(n==1||m==1){
for(i=1;i<=n;i++){
a[k]=1;
k++;
}
prt();
if(t) k=k-n;
return 1;
}
if(n<m) return(q(n,n));
if(n==m) {
a[k]=n;
k++;
prt();
if(t) k--;
s1=q(n,m-1);
return(1+s1);
}

a[k]=m;
k++;
prt();
if(t) k--;
s2=q(n-m,m);
k--;
s1=q(n,m-1);

return(s1+s2);
}

void main(){
a[0]=0;
printf("\nn=");
scanf("%d",&x);
printf("\ntotal=%d",q(x,x));
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧