A25986. 病毒繁殖提示信息:某种病毒具有很强的繁殖能力,从病毒粒子出生后的第5分钟开始,每分钟可以复制出一个新的病毒粒子。新出生的病毒粒子从第5分钟开始,也可以每分钟复制一个新的病毒粒子。举例来说,第1分钟时有一个病毒粒子,此病毒粒子从第5分钟开始复制新的病毒粒子,因此第5分钟时的病毒数量为2个;第6分钟时又复制出新的病毒粒子,因此第6分钟的病毒数量为3个;以此类推,第7分钟时病毒粒子数为4;第8分钟时病…
题目描述
病毒繁殖
提示信息:
某种病毒具有很强的繁殖能力,从病毒粒子出生后的第5分钟开始,每分钟可以复制出一个新的病毒粒子。新出生的病毒粒子从第5分钟开始,也可以每分钟复制一个新的病毒粒子。
举例来说,第1分钟时有一个病毒粒子,此病毒粒子从第5分钟开始复制新的病毒粒子,因此第5分钟时的病毒数量为2个;第6分钟时又复制出新的病毒粒子,因此第6分钟的病毒数量为3个;以此类推,第7分钟时病毒粒子数为4;第8分钟时病毒粒子数为5;第9分钟时,第5分钟复制出的病毒粒子开始复制新的病毒粒子,因此第9分钟时的病毒总数为7;第10分钟时,第6分钟复制出的病毒粒子开始复制新的病毒粒子,因此第10分钟时的病毒粒子总数为10。
题目描述
计算病毒粒子总数,已知第一分钟时出生了一个病毒粒子,假设所有病毒粒子不会自动死亡,请计算第N分钟时的病毒粒子总数。
例如:前10分钟病毒粒子的总数分别为1,1,1,1,2,3,4,5,7,10。
输入描述
输入一个正整数N(O<N≤60),表示时间。
输出描述
输出第N分钟时,病毒粒子的总数。
样例输入
10样例输出
10参考答案
#include <bits/stdc++.h>
using namespace std;
int main() {
// freopen("0.in","r",stdin);
// freopen("0.out","w",stdout);
int i, j, k;
int n, ans[1000] = {1, 1, 1, 1};
scanf("%d", &n);
for (i = 4; i < n; i++) {
ans[i] = ans[i - 1] + ans[i - 4];
}
printf("%d", ans[n - 1]);
// fclose(stdin);
// fclose(stdout);
return 0;
}答案解析
// 参考代码2
#include <cstdio>
#include <iostream>
using namespace std;
int n;
int a[65];
int main() {
scanf("%d", &n);
if (n < 5) {
printf("1");
return 0;
}
for (int i = 1; i <= 4; i++) {
a[i] = 1;
}
for (int i = 5; i <= n; i++) {
a[i] = a[i - 1] + a[i - 4];
}
// for(int i = 1;i<=10;i++)printf("%d ",a[i]);
printf("%d", a[n]);
return 0;
}