本题主要是找规律,找到结果的递推公式。分析前几项可知,结果的递推公式为 f(n)=f(n-1)+2*f(n-2)。
#include <iostream>
using namespace std;
const int MAX = 1010;
int result[MAX][MAX] = { { 0 }, { 0 }, { 1 }, { 1 } };
void initial(); //计算所有结果
int main()
{
int n;
initial();
while (cin >> n)
{
int flag = 0; //从后向前找到第一个不为0的数
if (n == 0 || n == 1)
cout << 0 << endl;
else
{
for (int i = MAX - 1; i >= 0; i--) //存放时是倒序,所以从后向前输出
{
if (result[n][i] || flag != 0)
{
cout << result[n][i];
flag = 1;
}
}
cout << endl;
}
}
return 0;
}
void initial()
{
for (int i = 4; i < MAX; i++)
{
int temp = 0;
int carry = 0;
for (int j = 0; j < MAX; j++)
{
temp += result[i - 1][j] + result[i - 2][j] + result[i - 2][j];
result[i][j] = temp % 10;
temp /= 10;
}
}
}
继续加油。
334

被折叠的 条评论
为什么被折叠?



