放苹果

来源:互联网 发布:四维星窗帘软件下载 编辑:程序博客网 时间:2024/06/10 04:26


问题描述

      把 M 个同样的苹果放在N 个同样的盘子里,允许有的盘子空着不放,问共有多少
种不同的分法?(用K 表示)注意:5,1,1 和1,5,1 是同一种分法。

输入数据  
      第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含两个整数M 和N,以
空格分开。1<=M,N<=10。

输出要求

      对输入的每组数据M 和N,用一行输出相应的K。

输入样例
1
7 3

输出样例
8


#include <stdio.h>int apple(int a,int b){int sum;if(a==0||b==1)sum=1;else{if(a<b)//苹果小于盘子数,相当与n个苹果放在n个盘子中;sum=apple(a,a);else//a个苹果,b个盘子的方法数=a放满b个盘子+a不放满b个盘子;sum=apple(a,b-1)+apple(a-b,b);//f(a, b-1): 把a个苹果放到b-1个盘子中的方法数(其中至少有一个空盘子)        //f(a-b, b): 把a个苹果放到b个盘子中,而且每个盘子中都有苹果(先拿b个出来,等a-b个放好了,然后每个盘子放一个)}return sum;}int main(int argc, char **argv){int t,n,m;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);printf("%d\n",apple(n,m));}return 0;}





原创粉丝点击