分石头

来源:互联网 发布:浮生知星辰txt百度云 编辑:程序博客网 时间:2024/04/25 23:03

实验任务

有一堆石头,共有 m 个,现在要你把他们分成小于等于 n 堆,一共有多少种不同的分法。

数据输入

输入第一行包括一个正整数 T(T<=10),接下来共有 T 组数据,每组数据只有一行,每行有两个正整数,m 和 n(m,n<=20)。

数据输出

每组数据输出一个数 sum,表示 sum 种不同的分法。

输入示例

1
7 3

输出示例

8

解题思路

只有1堆或没有石头,只有1种分法;
当 石头个数 少于 堆数, 按石头个数 分堆;
其余情况:
将m个石头分成n-1堆(保证有空堆)+ 先将n个石头分成n堆,剩下的m-n个石头再分成n堆(保证没有空堆)

参考代码

#include<stdio.h>    int f(int m,int n){        if(n ==1||m==0) return 1;        if(m<n) return f(m,m);        return f(m,n-1)+f(m-n,n);  }    int main(){        int T,m,n,i;        while (~scanf("%d",&T)){          for(i = 0;i < T;i++){              scanf("%d%d",&m,&n);              printf("%d\n",f(m,n));          }      }      return 0;  } 
0 0
原创粉丝点击