棋盘覆盖
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
-
在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的2×2方格(图2为其中缺右下角的一个),去覆盖2k×2k未被覆盖过的方格,求需要类似图2方格总的个数s。如k=1时,s=1;k=2时,s=5
图1
图2- 输入
- 第一行m表示有m组测试数据;
每一组测试数据的第一行有一个整数数k; 输出 - 输出所需个数s; 样例输入
-
3
-
1
-
2
-
3
样例输出 -
1
-
5
-
21
-
大数:
-
#include<stdio.h> #include<string.h> #include<math.h> #define MAX 1000+10 int a[MAX],b[MAX]; int main() { int t,n,i,j; int m,k,sum; scanf("%d",&t); while(t--) { scanf("%d",&n); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); a[0]=1; for(i=1;i<=2*n;i++) { k=0; for(j=0;j<MAX;j++) { a[j]=a[j]*2+k; k=a[j]/10; a[j]%=10; } } sum=0;m=0;k=0; for(i=MAX-1;i>=0;i--) if(a[i]!=0) break; for(;i>=0;i--) { sum=a[i]+k*10; b[m++]=sum/3; k=sum%3; } for(i=0;i<m;i++) if(b[i]!=0) break; for(;i<m;i++) printf("%d",b[i]); printf("\n"); } return 0; }
- 第一行m表示有m组测试数据;