-
描述
-
在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的2×2方格(图2为其中缺右下角的一个),去覆盖2k×2k未被覆盖过的方格,求需要类似图2方格总的个数s。如k=1时,s=1;k=2时,s=5
图2
-
输入
-
第一行m表示有m组测试数据;
每一组测试数据的第一行有一个整数数k;
输出
- 输出所需个数s; 样例输入
-
3
-
1
-
2
-
3
样例输出
-
1
-
5
-
21
f(n) = f(n - 1) * 4 + 1,
#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
int f[110][110];
int main()
{
memset(f,0,sizeof(f));
int n;
f[1][0]=1;
for(int i=2;i<=100;i++)
{
int l=0;
for(int j=0;j<=100;j++)
{
f[i][j]=f[i-1][j]*4+l;
if(f[i][j]/10) l=f[i][j]/10;
else l=0;
f[i][j]=f[i][j]%10;
}
}
for(int i=2;i<=100;i++)
{
int l=0;
for(int j=0;j<=101;j++)
{
f[i][j]=f[i][j]+f[i-1][j]+l;
l=f[i][j]/10;
f[i][j]=f[i][j]%10;
}
}
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int temp;
for(int i=101;i>=0;i--)
{
if(f[n][i]!=0)
{
temp=i;
break;
}
}
for(int i=temp;i>=0;i--)
printf("%d",f[n][i]);
printf("\n");
}
}