问题描述
问题分析
将第一幅图标记为 r=0 ; 将第二幅图标记为 r=1 ; 将第三幅图标记为 r=2…以此类推
按照列来分析:图中阴影格子的增长方式为在整个阴影区域左右两边各增加一个格子,在整个阴影每列上下各增加两个格子。根据观察,每次增加两个格子的列数正好为自然奇数列(即:1 3 5 7 9…)。
因此要求解 T(n) ,只需要将 T(n-1) 和在 T(n-1) 的基础上按照上述分析的增长方式增加的格子数量 相加即可。
问题解决
根据以上分析可得递推方程:
T(0)=1
T(n)=T(n-1)+2*(2*n-1)+2
进一步化简可得:
T(0)=1
T(n)=T(n-1)+4*n
求解递推方程可得:
T(n)=2*n * (n+1)+1
代码
//递推代码
#include <bits/stdc++.h>
using namespace std;
int fun(int n);
int main()
{
int n;
while(cin>>n)//n是大于等于0的整数,表示图的序号
{
cout<<fun(n)<<endl;//输出图中阴影方格的数量
}
return 0;
}
int fun(int n)
{
int k;
if(n==0)
k=1;
else
k=fun(n-1)+4*n;
return k;
}
//公式代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(cin>>n)//n是大于等于0的整数,表示图的序号
{
cout<<2*n*(n+1)+1<<endl;//输出图中阴影方格的数量
}
return 0;
}