zoukankan      html  css  js  c++  java
  • eggs

    Description:

    Erin买了不少鸡蛋,她发现一天吃不完这么多,于是决定把n个同样的鸡蛋放在m个同样的篮子里,允许有的篮子空着不放,请问共有多少种不同的放法呢?

    注意:2,1,1和1,2,1 是同一种分法。

    Input

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

    Output

    对输入的每组数据m和n,用一行输出相应的结果。

    例如:

    Input:

    4

    3 8

    4 7

    2 4

    4 2

    Output:

    10

    11

    3

    2

    (注意结尾有换行)


    Hint:

    尝试利用递归去分析解题,即不同情况下应该怎么返回。

    可以尝试用树状图(然而我觉得用处不大)。

    注意篮子可以空着不放,请先想明白示例中最后两个例子再做题。


    我的代码:

    #include<stdio.h>
    int egg(int m, int n);
    int main() {
        int t, m, n, i, result = 0;
        scanf("%d", &t);
        for (i = 0; i < t; i++) {
            scanf("%d%d", &m, &n);
            result = egg(m, n);
            printf("%d
    ", result);
        }
        return 0;
    }
    int egg(int m, int n) {
        if (m == 1 || n == 1) {
            return 1;
        }
        if (n <= m) {
            return 1 + egg(n-1, n);
        } else {
            return egg(m-1, n) + egg(m, n-m);
        }
    }

    标答:

    #include<stdio.h>
    int egg(int m, int n);
     
    int main() {
        int t;
        // m for baskets, n for eggs
        int m, n;
        int result = 0;
        scanf("%d", &t);
        while (t--) {
            scanf("%d %d", &m, &n);
            result = egg(m , n);
            printf("%d
    ", result);
        }
        return 0;
    }
     
    int egg(int m, int n) {
        if (m == 1 || n == 0)
            return 1;
        if (n < 0)
            return 0;
        return egg(m-1, n) + egg(m, n-m);
    }
  • 相关阅读:
    chapter01
    2019.07.11
    系统进程
    Linex第五-第七章
    Linex第三章第四章
    Linux 系统管理 第二章第三章
    2019/7/24
    使用.htaccess进行浏览器图片文件缓存
    div+css3实现漂亮的多彩标签云,鼠标移动会有动画
    搜索排序的作弊与反作弊,面壁人与智子的巅峰对决
  • 原文地址:https://www.cnblogs.com/xieyuanzhen-Feather/p/5049578.html
Copyright © 2011-2022 走看看