C语言放苹果问题

来源:百度知道 编辑:UC知道 时间:2024/06/09 02:29:49
M个相同的苹果放到N个相同的盘子(可有空盘)问有多少种放法
如;
input//苹果数、盘子数
7 3
output
8
哪位大虾帮我看看程序错哪了?提交就是wrong answer
#include <stdio.h>

int main()
{
int t,m,n,i,k;
scanf("%d",&t);
for(i=0;i<t;i++)
{
if(t<0||t>20)
break;
scanf("%d%d",&m,&n);
if(m<1||n>10)
break;
else
{
if(n==1)
k=1;
if(n==2)
k=m/2+1;
if(n==3)
k=(m/3-1)*3+m%3+m/2+1;
if(n==4)
k=(m/4-1)*4+m%4+(m/3-1)*3+m%3+m/2+1;
if(n==5)
k=(m/5-1)*5+m%5+(m/4-1)*4+m%4+(m/3-1)*3+m%3+m/2+1;
if(m==n&&m>=3)
k+=1;
printf("%d\n",k);
}
}
return 0;
}

可以用递归的方法实现。
#include<stdio.h>
int fun(int m,int n,int j);
int main(void)
{ int n,m,s;
printf("Please input : m n\n");
scanf("%d%d",&m,&n);
if(n>m) n=m; /*因为盘子是相同的,所以,盘子数>苹果数的情况与n=m的情况相同*/
s=fun(m,n,0);
printf("%d\n",s);
}
int fun(int m,int n,int j)
{ int i,s=0;
if(n==1) return m>=j;
for(i=j;i<m;i++) s+=fun(m-i,n-1,i);
/*递归调用,先从m个苹果中拿出i个放在第一个盘子,再计算m-i个苹果放入n-1个盘子的问题(注意:为了不重复,放入下一个盘子的苹果数要大于等于i个)*/
return s;
}

都是相同的东西.怎么都是1种放法啊,你要求的是不是组合啊?可是...你的题意没弄明白