点击这里查看题目
公式推导出来,就很容易了
- 1对成年老鼠年中生2对,年末生2对。(由于年中出生的小鼠在第二年的生育周期跟已有的老鼠的周期完全一样,所以,把年中出生的小鼠归到成年老鼠中,所以,1对成年老鼠一年生2对老鼠,2对小鼠)。
- 1对去年年末出生的小鼠长大成老鼠,并生下2对小鼠
- 因此得到老鼠变化: adult[i]=adult[i-1]+adult[i-1]*2+child[i-1];即今年老鼠=去年的老鼠+去年年中出生的小鼠+去年的去年的小鼠(长大了)
- 小鼠变化:child[i]=adult[i-1]*2+child[i-1]*2;即今年小鼠=去年末出生的小鼠+今年年末出生的小鼠
#include<iostream>
using namespace std;
int adult[20],child[20],ans[20];
int main()
{
child[0]=1;
adult[0]=0;
ans[0]=1;
for(int i=1;i<=18;i++)
{
adult[i]=adult[i-1]*3+child[i-1];
child[i]=adult[i-1]*2+child[i-1]*2;
ans[i]=adult[i]+child[i];
//cout<<i<<":"<<adult[i]<<" "<<child[i]<<endl;
}
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
cout<<ans[n]<<endl;
}
}