每对成虫过x个月产y对卵,每对卵过两个月长成成虫
设第n个月有a[n]只成虫,b[n]只卵,可列出递推式
\begin{cases}a[n]=a[n-1]+b[n-2]\\b[n]=y\times a[n-x]\end{cases}
既然不需要卵的数量,将两式合并,得到成虫数量公式
a[n]=a[n-1]+y\times a[n-x-2]
递推求解即可
python

  1. x,y,z=map(int,input().split())
  2. l=[1]*(x+2)
  3. for i in range(z+~x):l.append(l[-1]+y*l[i])
  4. print(l[z])

C++

  1. #include<deque>
  2. #include<iostream>
  3. using namespace std;
  4. int main(){
  5. size_t x,y,z;
  6. cin>>x>>y>>z;
  7. deque<size_t>d(x+2,1);
  8. for(size_t i=z-x;--i;d.pop_front())
  9. d.push_back(d.back()+y*d.front());
  10. cout<<d.back();
  11. }

java

  1. import java.util.Scanner;
  2. import java.util.LinkedList;
  3. import java.util.stream.IntStream;
  4. import java.util.stream.Collectors;
  5. public class Main {
  6. public static void main(String[] args) {
  7. final Scanner in = new Scanner(System.in);
  8. final int x = in.nextInt(), y = in.nextInt(), z = in.nextInt();
  9. LinkedList<Long> l = IntStream.range(0, x + 2).mapToObj(i -> 1L).collect(Collectors.toCollection(LinkedList::new));
  10. IntStream.range(0, z+~x).forEach(i -> l.add(l.getLast() + y * l.poll()));
  11. System.out.print(l.getLast());
  12. }
  13. }
点赞(0)
 

9 分

2 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 2 条评论

酸菜娃 1月前 回复TA
可读性很差
CloudEye 2年前 回复TA
分析很好,代码可读性一言难尽。