1 solutions
-
0
C++ :
#include <stdio.h> #include <stdlib.h> int f(int p,int q); //这里f就是递归求在q个框子里放p个苹果的方法总数的 int main(){ int m,n,i; scanf("%d",&i); while (i--){ scanf("%d%d",&m,&n); printf("%d\n",f(m,n)); } return 0; } //递归函数的思想是,在n个盘子里放m个苹果,允许有盘子空,按层次可以划分成如下的子问题:1》在n个盘子中不空的放。显然此时方法种数相当于在n个盘子里面放(m - n)个苹果2》n个盘子中至少有一个空,即盘子规模小1的子问题。 int f(int p, int q){ int z; if(p == 0|| q == 1) z = 1; //这里是两个递归结束条件,既递归的出口;要么就是所有的苹果 //放到一个盘子里,要么就是没有苹果了(这种结果的产生如下) else{ if(p < q) z = f(p,p); //盘子数大于苹果数,那么就相当于在p个盘子 //里放p个苹果。 else z = f(p-q,q)+ f(p,q-1); //总问题和子问题 } return z; }
- 1
Information
- ID
- 1318
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- (None)
- # Submissions
- 0
- Accepted
- 0
- Uploaded By