棋盘覆盖
时间限制: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
图2-
输入
-
第一行m表示有m组测试数据;
每一组测试数据的第一行有一个整数数k;
输出
- 输出所需个数s; 样例输入
-
3
-
1
-
2
-
3
样例输出
-
1
-
5
-
21
-
#include<stdio.h> #include<string.h> int main(){ int m,n,i,j,k; int num[10000]; scanf("%d",&m); while(m--){ scanf("%d",&n); memset(num,0,sizeof(num)); num[0] = 2; j = 1; for( i = 1 ; i < 2*n ; ++i ){ for( k = 0 ; k <= j ; ++k ) num[k]*=2; for( k = 0 ; k <= j+1 ; ++k ) if( num[k] > 9 ){ num[k]-=10; num[k+1]++; } j = k; } int b = 0; for( k = j ; k >= 0 ; --k ){ int a = num[k] + b * 10; b = a % 3; num[k] = a/3; } for( ; j > 0 ; --j ) if(num[j]) break; for( ; j >= 0 ; --j ) printf("%d",num[j]); printf("\n"); } return 0; }
-
第一行m表示有m组测试数据;