zoukankan      html  css  js  c++  java
  • 递归-放苹果

    把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?5,1,1和1,5,1 是同一种分法。

    5个苹果放入1个盘子,1种方法与1个苹果放入5个盘子,也是1种方法,其中他们的方法是相同的,告诉我们,不区分苹果和盘子的序号。


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

    样例输入
    1
    7 3
    样例输出
    8

    解题思路:设i个苹果放在k个盘子里放法总数是 f(i,k),则:
    k > i 时, f(i,k) = f(i,i),
    就是当盘子数量多过苹果,就是把全部苹果放完,总有相同数量的
    盘子是空的。
    k <= i 时,总放法 = 有盘子为空的放法+没盘子为空的放法
    f(i,k) = f(i,k-1) + f(i-k,k)

    有盘子为空的放法=i个苹果放入k-1个盘子,这样就有盘子没有放满。函数:f(i,k-1),
    有人会想,为什么是k-1,为什么是少一个盘子呢,也可以少2个呀,甚至更多呀。其实,
    函数f(i,k-1)就是理解为i个苹果,放k-1个盘子有多少种方法,也就包含空1个、2个、3个
    等等的情况了。

    f(i-k,k)的理解,就是先把所有的盘子都放了1个苹果,然后把剩余的苹果放入盘子有多少种方法。

    如果喜欢钻牛角尖,有人会问为什么m=0,也有1种方法呢?在没盘子是空的放法中,如果手上的苹果

    放完所有的盘子,刚巧苹果也没有了,这样,没有空盘子的方法是不是1种呢?^.^

     python代码如下:

    """
    例题:放苹果
    把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
    5,1,1和1,5,1 是同一种分法。
    输入
    第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
    输出
    对输入的每组数据M和N,用一行输出相应的K。
    样例输入
    1
    7 3
    样例输出
    8
    """
    import sys
    #创建二维列表
    list= [[] for i in range(2)]
    
    #m个苹果、n个盘子
    def f(m,n):
        if (m<n):
            return f(m,m)
        if (m == 0 or m == 1):
            return 1
        if (n <= 0):
            return 0
        return f(m,n-1) + f(m-n,n)
    
    #sys.stdin.readlines()
    def main():
        #a,b = input("请输入测试数据:")
        a,b = map(int,input("请输入测试数据:").split(","))
        #print(testData)
        rtn = f(a,b)
        print(rtn)
    
    if (__name__ == "__main__"):
        main()
  • 相关阅读:
    【转】VS2010中 C++创建DLL图解
    [转]error: 'retainCount' is unavailable: not available in automatic reference counting mode
    [转]关于NSAutoreleasePool' is unavailable: not available in automatic reference counting mode的解决方法
    【转】 Tomcat v7.0 Server at localhost was unable to start within 45
    【转】Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If
    【转】SVN管理多个项目版本库
    【转】eclipse安装SVN插件的两种方法
    【转】MYSQL启用日志,和查看日志
    【转】Repository has not been enabled to accept revision propchanges
    【转】SVN库的迁移
  • 原文地址:https://www.cnblogs.com/an-wl/p/12409434.html
Copyright © 2011-2022 走看看