有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
Input
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
Output
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
Sample Input
2
4
5
0
Sample Output
2
4
6
年份 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
数量 | 1 | 2 | 3 | 4 | 6 | 9 | 13 |
根据年份和数量找到对应的关系即可
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long int num[100];
for (int i = 1; i <= 4; i++)
{
num[i] = i;
}
for (int i = 5; i < 60; i++)
{
num[i] = num[i - 3] + num[i - 1];//根据表中的规律,所求年份的数量等于三年前的数量加上去年数量
}
int n;
while (cin >> n && n)
{
cout << num[n] << endl;
}
}
类似的一个题目
昆虫繁殖
题目描述
科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过X个月产卵),问过Z个月以后,共有成虫多少对?0≤X≤20,1≤Y≤20,X≤Z≤50
输入
x,y,z的数值
输出
过Z个月以后,共有成虫对数
样例输入
1 2 8
样例输出
37
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
long long y, z, x, i, a[101] = {0}, b[101] = {0}; //a数组里存的是指定月数里的成虫对数,b数组里存的是指定月数的新生昆虫对数
cin >> x >> y >> z; //输入x,y,z的数值
for (i = 1; i <= x; i++) //因为过x个月才产卵,所以x个月中的每一个月:a数组里一直是一对成虫,所以a[i]=1;b数组里的新生昆虫对数一直是0,b[i]=0
{
a[i] = 1;
b[i] = 0;
}
for (i = x + 1; i <= z + 1; ++i) //从x个月后的第x+1个月开始,有新生昆虫诞生,开始计数,一直统计到第z个月之后,也就是统计到第z+1个月
{
b[i] = y * a[i - x]; //(第i个月的新生昆虫对数为第i个月的前x个月的成虫对数)a[i-x]*(每对成虫产卵量)y
a[i] = a[i - 1] + b[i - 2]; //(第i个月的成虫对数)a[i]为(上一个月i-1的成虫对数) a[i-1]加上(前2个月的新生昆虫对数)b[i-2](因为新生昆虫2个月后长成成虫昆虫)
}
cout << a[z + 1] << endl; //输出第z+1个月的成虫对数
return 0;
}
/*注释内容来自:https://blog.csdn.net/FENGXUEYINCHEN/article/details/109919280*/