原题链接:信息学奥赛一本通T1312-昆虫繁殖
每对成虫过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
x,y,z=map(int,input().split())
l=[1]*(x+2)
for i in range(z+~x):l.append(l[-1]+y*l[i])
print(l[z])
C++
#include<deque>
#include<iostream>
using namespace std;
int main(){
size_t x,y,z;
cin>>x>>y>>z;
deque<size_t>d(x+2,1);
for(size_t i=z-x;--i;d.pop_front())
d.push_back(d.back()+y*d.front());
cout<<d.back();
}
java
import java.util.Scanner;
import java.util.LinkedList;
import java.util.stream.IntStream;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
final Scanner in = new Scanner(System.in);
final int x = in.nextInt(), y = in.nextInt(), z = in.nextInt();
LinkedList<Long> l = IntStream.range(0, x + 2).mapToObj(i -> 1L).collect(Collectors.toCollection(LinkedList::new));
IntStream.range(0, z+~x).forEach(i -> l.add(l.getLast() + y * l.poll()));
System.out.print(l.getLast());
}
}
9 分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复