zoukankan      html  css  js  c++  java
  • 母牛的故事

    问题描述:有一头母牛,它每年年初生一头小母牛。
    每头小母牛从第四个年头开始,每年年初也生一头小母牛。
    请编程实现在第n年的时候,共有多少头母牛?Input输入数据由多个测试实例组成,
    每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。

    (1)刚开始觉得很简单,直接下手写,第一个程序很快写完,测试一下10年以内,

          也能正确完成,但是当输入年数在40以后时,运算速度变很慢,看了下内存占用很大

    (2)想了下可能是第一种方法list无法释放,又写了第二种方法,性能和第一种相差不大

    (3)拿纸列了写了下这个数列,终于发现了规律,原来后面每两年之间的差正好是三年前的数

    各年的母牛数如下:

    第一年:1

    第二年:2

    第三年:3

    第四年:4

    第五年:6

    第六年:9

    第七年:13

    第八年:19

    第九年:28

    第十年:41

    第十年数=第九年数+第七年数

    第九年数=第八年数+第六年数

    再写出来的程序,不需要递归,速度就很快了,三种方法都记录如下

     1 class Caw:
     2     total=0
     3     def __init__(self,age=1):
     4         self.age=age
     5 
     6 #method1
     7 def cal(year,cawlist):
     8     for i in range(year-1):
     9         cplist=[]
    10         cplist.extend(cawlist)
    11         for caw in cplist:
    12             caw.age+=1
    13             if caw.age>=4:
    14                 newcaw=Caw()
    15                 cawlist.append(newcaw)
    16     return len(cawlist)
    17 #method2
    18 def calnew(year,cawlist):
    19     if len(cawlist)==0:
    20         return 0
    21     count=len(cawlist)
    22     for caw in cawlist:
    23         for i in range(caw.age-3):
    24             #print 'i:'+str(i)
    25             cawchild=Caw(i+1)
    26             #if cawchild.age>=4:
    27             cawChildList=[]
    28             cawChildList.append(cawchild)
    29             count+=calnew(year,cawChildList)
    30             cawlist=None
    31     return count
    32 
    33 #method2
    34 def calgood(year,cawlist):
    35     if year<5:
    36         return len(cawlist)+(year-1)*len(cawlist)
    37     else:
    38         return calgood(year-1,cawlist)+calgood(year-3,cawlist)
    39 
    40 while True:
    41     year=input('input year:')
    42     if year==0:
    43         break
    44         #good method
    45     cawlist=[Caw()]
    46     print ('len:'+str(calgood(year,cawlist)))
    47     #new method
    48     cawlist=[Caw(3+year-1)]
    49     print ('len:'+str(calnew(year,cawlist)))
    50     #yuan method
    51     cawlist=[Caw(3)]
    52     print ('len:'+str(cal(year,cawlist)))
  • 相关阅读:
    如何使用maven进行avro序列化
    CDH搭建和集成spark、kafka操作
    spark批量写写数据到Hbase中(bulkload方式)
    Hbase服务报错:splitting is non empty': Directory is not empty
    关于java中的伪共享的认识和解决
    一次流式处理的submit
    Hbase的写入负载均衡
    基于bs4库的HTML标签遍历方法
    BeautifulSoup库的基本元素
    Requests的基本使用
  • 原文地址:https://www.cnblogs.com/zwm512327/p/3788080.html
Copyright © 2011-2022 走看看