首页 > 试题广场 >

统计每个月兔子的总数

[编程题]统计每个月兔子的总数
  • 热度指数:255944 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}有一种兔子,从出生后第三个月起,每个月都会生一只兔子,生出来的兔子同理。假设兔子都不死,求解第 n 个月时的兔子总数。

输入描述:
\hspace{15pt}在一行上输入一个整数 n \left(1 \leqq n \leqq 31\right) 代表查询的月份。


输出描述:
\hspace{15pt}在一行上输出一个整数,代表第 n 个月的兔子总数。
示例1

输入

3

输出

2

说明

\hspace{15pt}第一个月时,只有初始兔子(记为 r_0 ),此时兔子总数为 1
\hspace{15pt}第二个月时,依旧只有 r_0 ,此时兔子总数为 1
\hspace{15pt}第三个月时,r_0 开始生兔子(记生出来的兔子为 r_1 ),此时兔子总数为 2
\hspace{15pt}第四个月时,r_0 再生一只兔子,此时兔子总数为 3
\hspace{15pt}第五个月时,r_0 再生一只兔子,与此同时 r_1 也开始生兔子,此时兔子总数为 5
示例2

输入

5

输出

5
n=int(input("请输入第几个月"))
s=1
i=2
while i<=n:
    s=s+(n-i)
    i=2*i
print(s)
发表于 2022-09-23 21:02:10 回复(0)
month = int(raw_input())
def rubbet(n):
    if n== 1&nbs***bsp;n == 2:
        return 1
    return rubbet(n-1) + rubbet(n - 2)
print(rubbet(month))

发表于 2022-03-20 15:11:29 回复(0)
while True:
    try:
        month = input()
        if month < 3:
            print(1)
        else:
            tmplist = [1,1]
            for i in range(month):
                if i >= 2:
                    tmplist.append(tmplist[i-1] + tmplist[i-2])
        print(tmplist[i])
    except:
        break

发表于 2021-10-05 21:54:20 回复(0)
#递归思想
m=input("输入月份:")
mm=int(m)
mouth_1 = 1
mouth_2 = 1
def func(mouth):
    if mouth == 1:
        num = mouth_1
    elif mouth == 2:
        num = mouth_2
    else:
        num=func(mouth-1)+func(mouth-2)
    return num
print(func(mm))

发表于 2021-06-19 18:32:42 回复(0)
import sys

# 递归
def rabbit(month):
    if month == 1 or month == 2:
        return 1
    return rabbit(month-1) + rabbit(month-2)

# 动态规划
def rabbit_dp(month):
    if month <= 2:
        return 1
    lst = [0]*month
    lst[0] = 1
    lst[1] = 1
    for i in range(2, month):
        lst[i] = lst[i-1] + lst[i-2]
    return lst[-1]

for line in sys.stdin:
    try:
        month = int(line)
#         print(rabbit(month))
        print(rabbit_dp(month))
    except:
        pass
# 方法3:
import sys


def func(num):
    n1 = 1
    n2 = 1
    tmp = 1
    for i in range(3, num+1):
        tmp = n2
        n2 = n1 + n2
        n1 = tmp
    return n2

for line in sys.stdin:
    print(func(int(line)))




编辑于 2021-06-04 08:59:15 回复(0)
def f(n:int):
    if n ==1&nbs***bsp;n==2:
        return 1
    return f(n-1)+f(n-2)

while True:
    try:
        month = input()
        print(f(int(month)))
    except:
        break

发表于 2021-03-28 14:27:27 回复(0)
whileTrue:
    try:
        month=int(input())
        a,b=1,0
        fori in range(month):
            a,b=b,a+b #只有两种类型的兔子,成熟和不成熟,成熟的兔子数等于上月所有兔子总数,不成熟的兔子数等于上月成熟的兔子数
        print(b)
    except:
        break
发表于 2021-03-22 20:04:08 回复(0)
#a:刚一个月大兔子数,b:两个月大兔子数,c:满三个月上兔子个数
while True:
    try:
        n=int(input())
        a=1
        b=0
        c=0
        for i in range(1,n):#过一个月的变化
            c=c+b
            b=a
            a=c
            num=a+b+c
        print(num)
    except:
        break
发表于 2021-03-14 18:32:00 回复(0)
def f(n):
    if n<=1:
        return (1,0)
    else:
        a,b = f(n-1)
        return a+b,a

    
while True:
    try:
        month = raw_input()
        print int(f(int(month))[0])
    except:
        break

发表于 2021-03-03 22:23:52 回复(0)
while True:
    try:
        month = int(input())
        rabbit = [0]  # [索引表示兔子,值表示年龄]
        for i in range(month): 
            for j in rabbit:
                if j > 1:
                    rabbit.append(0)
            rabbit = list(map(lambda x: x + 1, rabbit))
        sum = len(rabbit)
        print(sum)

    except EOFError:
        break
数学语文都不好的我流下了不学无术的泪水,最差通过应该是我了。这个当做留恋一下😂,然后赶紧学习一下兔子数列。
发表于 2021-03-03 17:43:23 回复(0)

斐波那契数列:1 1 2 3 5 8 13 21 34 f(n)=f(n-1)+f(n-2) n>2,n从0开始
1、递归:
while True:
    try:
        month=int(input())
        n=month-1
        def func(n):
            if n<2:#基线条件
                return 1
            else:#递归条件
                return func(n-1)+func(n-2)
        print(func(n))
    except:
        break
                 
2、循环列表
import sys
for s in sys.stdin:#s=input()读入数据的1行
    month=int(s)
    L=[]
    for i in range(month):
        if i<2:#前两个月都为1
            total=1
            L.append(total)
        else:
            total=L[i-1]+L[i-2]#之后均为前两个数的和
            L.append(total)
    print(L[-1])#最后的列表L=[1, 1, 2, 3, 5, 8, 13, 21, 34]





发表于 2021-02-20 01:32:42 回复(0)
while True:
    try:
        n = int(input())
        if not n:
            break
        if n < 3:
            print(1)
        else:
            pre_had,can_birth = 1,1
            for i in range(3, n+1):
                new_had = pre_had + can_birth
                new_can_birth = pre_had
                pre_had = new_had
                can_birth = new_can_birth
            print(pre_had)
    except:
        break

发表于 2021-02-19 10:48:04 回复(0)
#无性生殖真nb
def str1():
    while True:
        try:
            input_str=input()
            print(tuzi(int(input_str)))
        except:
            break

def tuzi(n):
    if(n==2&nbs***bsp;n==1):
        return 1
    return tuzi(n-1)+tuzi(n-2)
str1()
为啥我运行时间这么长啊
是不是死循环那的问题啊

发表于 2021-01-27 00:28:49 回复(0)
while True:
    try:
        num = int(input())
        k3 = 1
        k2 = 0
        k1 = 0
        for i in range(1,num-1):
            k3 += k2
            k2 = k1
            k1 = k3
        print(str(k1+k2+k3))
    except:
        break
发表于 2021-01-21 20:58:17 回复(0)
#斐波那契dp法
def dp(x):
    dp = [0 for i in range(0,10000)]
    dp[0] =1
    dp[1] = 1
    for i in range(2,x+1):

        dp[i] = dp[i-1]+ dp[i-2]  #斐波那契 dp    
    return dp[x]
while True:
    try:
        x = int(input())
        
        a = dp(x-1)
        print(a)
    except:
        break
        
    
发表于 2021-01-19 17:11:54 回复(0)
while True:
    try:
        a = int(input())
        new_born = [0]*a
        new_born[0] = 1
        for i in range(a):
            new_born[i+2 : a] = [x+ new_born[i] for x in new_born[i+2 : a]]
        print(sum(new_born))
    except:
        break
按照月份来叠加计算新生兔子, 根据每个月存在的兔子, 计算出未来月份新生的兔子

发表于 2021-01-05 13:29:43 回复(0)
def fun(n):
    if n<1:
        return -1
    if n==1 or n==2:
        return 1
    else:
        return fun(n-1)+fun(n-2)
res=fun(int(input()))
if res !=-1:
    print(res)
发表于 2020-12-20 22:09:12 回复(0)
def cal(n):
    a, b = 1, 0
    while n > 1:
        a, b = b, a + b
        n -= 1
    return a + b


fib = lambda n: 1 if n < 3 else fib(n-1) + fib(n-2)
    
while True:
    try:
        n = int(input())
#         print(cal(n) if n else 0)
        print(fib(n) if n else 0)
    except:
        break

发表于 2020-12-15 23:00:02 回复(0)
n=int(input())
N=[1,1,1]
if n==0 or n==1 or n==2:
    print(int(N[n]))
else:
    i=2
    while i<n:
        N.append(N[i]+N[i-1])
        i+=1
    print(int(N[n]))
不知道哪里不对
发表于 2020-12-07 15:38:49 回复(0)
while True:
 try:
    list=[1,1]
    a=1
    s=1
    x=int(input())
    for i in range(x-2):
        s0=s+a
        a=s
        s=s0
        list.append(s)
    print(list[-1])               
 except:
     break
简单
发表于 2020-11-28 11:28:31 回复(1)