描述
话说现在猪肉价格这么贵,小明也开始了养猪生活。说来也奇怪,他养的猪一出生第二天开始就能每天中午生一只小猪,而且生下来的竟然都是母猪。
不过光生小猪也不行,小明采用了一个很奇特的办法来管理他的养猪场:
对于每头刚出生的小猪,在它生下第二头小猪后立马被杀掉,卖到超市里。
假设在创业的第一天,小明只买了一头刚出生的小猪,请问,在第N天晚上,小明的养猪场里还存有多少头猪?
输入描述
测试数据的第一行是一个正整数T,代表测试数据的个数。接下来有T组测试,每组测试数据占一行,分别是一个正整数N,代表小明创业的第N天。(0<N<20)
输出描述
对于每组数据,请在一行里输出第N天晚上养猪场里猪的数目。
用例输入 1
2 2 3
用例输出 1
2 3
解题思路:
设第N天的猪为Arr[n],Arr[n] = Arr[n-1] + Arr[n-1](出生的数量) - Arr[n-1](卖掉的数量);
分析得:
Arr[n-1](出生的数量) = Arr[n-1];
Arr[n-1](卖掉的数量) = Arr[n-3](出生得数量);也就是说前天出生的所有小猪都会被卖掉;
而Arr[n-3](出生得数量) = Arr[n-3];
得出递归公式为:
Arr[n] = 2*Arr[n-1] - Arr[n-3];
Arr[0] = 1;
Arr[1] = 2;
Arr[2] = 3;
c++代码如下:
#include <iostream>
using namespace std;
int main()
{
int arr[99];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
for(int i = 3;i<99;++i)
{
arr[i] = 2*arr[i-1] - arr[i-3];
}
int n;
cin >> n;
while(n--)
{
int num;
cin >> num;
cout << arr[num-1] << endl;
}
}