WOJ1294-数老鼠

斯坦迪博士在研究一种新的老鼠,它们寿命很长,可以活20年以上,繁殖能力强。一对成年老鼠每6个月可以生2对小鼠(假定每对小鼠雌雄各一),小鼠1年后可以成长为成年老鼠,并生下2对小鼠(假定每对小鼠雌雄各一)。现在博士想要知道,在理想的环境下,一对小鼠经过n整年后,一共可以繁殖出多少对老鼠?(包括它本身)


输入格式

输入数据有 t + 1 行: 第一行包括一个正整数t,表示测试数据有t组; 然后的t行,每一行包含一个正整数n(0<n<=15),代表经过了n年。

输出格式

针对每个n输出一行,包含一个正整数S,代表n年后一共有S对老鼠。

样例输入

2
1
2

样例输出

3
11


/****************************************
定义三种老鼠:
A:成年鼠
B:小鼠
C:半年鼠(6个月大的老鼠)

题目的意思转化为:
一对 A 鼠每6个月产生 2 对 B 鼠;
一对 B 鼠经过 6 个月变成一对 C 鼠;
一对 C 鼠经过 6 个月变为一对 A 鼠,同时产下 2 对 B 鼠。
定义一个变量 nHalfYears ,表示经过了多少半年。
定义一个变量 sum ,表示经过 nHalfYears 半年后老鼠的总数。列表如下:
nHalfYears               sum
0                        B        
1                        C
2                        A+2B
3                        A+2B+2C
4                        3A+6B+2C
5                        5A+10B+6C
6                        11A+22B+10C
7                        21A+42B+22C
8                        43A+86B+42C
·                       ·
·                       ·
·                       ·
n                        an A + bn B + cnC
找规律,得出:
bn = (an-1 + cn-1)*2
cn-1=bn-2
an-1=bn-1/2
所以得出==》
bn=(bn-1/2 + bn-2)*2 = bn-1+2*bn-2
sum = (3/2)*bn + bn-1
****************************************************/
#include <stdio.h>
int main(){
    long long b[31]={0};
    b[2]=2;
    b[3]=2;
    int Case,nYears,nHalfYears;
	long long sum;
    for(int i=4;i<=30;i++)    
        b[i]=b[i-1]+2*b[i-2];
    scanf("%d",&Case);
    while (Case--){
    	scanf("%d",&nYears);
        nHalfYears=2*nYears; 
        sum=3*b[nHalfYears]/2+b[nHalfYears-1];
        printf("%lld\n",sum);
    }
    return 0;
}



#include<stdio.h>
long long ans[16]={0,3,11,43,171,683,
                     2731,10923,43691,174763,699051,
					 2796203,11184811,44739243,178956971,715827883};
int main(){
	int Case,y;
	scanf("%d",&Case);
	while(Case--){
		scanf("%d",&y);
		printf("%lld\n",ans[y]);
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值