棋盘覆盖
时间限制: 3 Sec 内存限制: 64 MB[ 提交][ 状态][ 讨论版]
题目描述
在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的2×2方格(图2为其中缺右下角的一个),去覆盖2k×2k未被覆盖过的方格,求需要类似图2方格总的个数s。如k=1时,s=1;k=2时,s=5
图1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
输入
第一行m表示有m组测试数据; 每一组测试数据的第一行有一个整数数k;
输出
输出所需个数s;
样例输入
3123
样例输出
1521
问题分析:求出总的方格个数,对3相除的结果即为所求
代码如下:
# include<stdio.h>
int main()
{
int n;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int a[65]={0};
a[0]=1;
for(int i=1;i<=n;i++) //求方格的个数
{
int k=0;
for(int j=0;j<65;j++)
{
int r=a[j]*4+k;
a[j]= r%10;
k=r/10;
}
}
int i;
for( i=64;i>=0;i--)
{
if(a[i]!=0)
break;
}
int k=0;
for(int j=i;j>=0;j--) //对 3 相除
{
int r=a[j]+k*10;
a[j]=r/3;
k=r%3;
}
for(i;i>=0;i--)
if(a[i]!=0)
break;
for(i;i>=0;i--) //输出结果
printf("%d",a[i]);
printf("\n");
}
return 0;
}