nyoj整数划分(二)

来源:互联网 发布:商务通软件 编辑:程序博客网 时间:2024/05/21 09:19

整数划分(二)

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述

把一个正整数m分成n个正整数的和,有多少种分法?

例:把5分成3个正正数的和,有两种分法:

1 1 3

1 2 2

输入
第一行是一个整数T表示共有T组测试数据(T<=50)
每组测试数据都是两个正整数m,n,其中(1<=n<=m<=100),分别表示要拆分的正数和拆分的正整数的个数。
输出
输出拆分的方法的数目。
样例输入
25 25 3
样例输出
22

当n == m || m == 1的时候只有一种情况,要么分成n个1,要么分成一个数n

当n < m 时,不够分,返回0

当n > m 时,

第一种情况,含1,剩下n - 1分成m-1个数,

第二种情况,不含1,先将n分成m个1,再将n - m分成m个数加上原来的1

 #include <stdio.h>#include <stdlib.h>int fun(int n, int m){    if(n == m || m == 1)        return 1;    if(n < m)        return 0;    if(n > m)        return fun(n - m, m) + fun(n - 1, m - 1);    return 0;}int main(){    int n, num, m;    scanf("%d", &n);    while(n--)    {        scanf("%d%d", &num, &m);        printf("%d\n", fun(num, m));    }    return 0;}        

0 0