题目:
有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?
/**
* 统计出兔子总数。
*
* @param monthCount 第几个月
* @return 兔子总数
*/
public static int getTotalCount(int monthCount)
{
return 0;
}
分析:
把兔子按新生,一个月,两个月,成年分成四类,只需要每个月更新每种兔子的数量即可
但是分四类无法通过牛客的用例,所以我并不认同他那个题,但是能通过测试的代码也有写
代码:
#include<iostream>
#include<vector>
using namespace std;
int outPut(int n)
{
/*
vector<int> arr(4, 0);
arr[0] = 1;
while (n)
{
arr[3] += arr[2];//成年
arr[2] = arr[1];//两个月
arr[1] = arr[0];//一个月
arr[0] = arr[3];//出生
n--;
}
*/
//下面是能通过用例的:
//但我认为这种做法是错误的,分析一下可以看出,
//一只新生兔子只需要经过两次循环就可以产子,也就是只过了两个月
//但只有这样才可以通过测试用例
vector<int> arr(3, 0);
arr[0] = 1;
while (--n)
{
arr[2] += arr[1];//成年
arr[1] = arr[0];//两个月
arr[0] = arr[2];//一个月
}
int sum = 0;
for (auto& a : arr)
sum += a;
return sum;
}
int main()
{
int n;
while (cin >> n)
{
cout << outPut(n) << endl;;
}
return 0;
}