加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

NYOJ 45 棋盘覆盖

发布时间:2020-12-14 03:06:51 所属栏目:大数据 来源:网络整理
导读:棋盘覆盖 时间限制: 3000 ?ms ?|? 内存限制: 65535 ?KB 难度: 3 描述 在一个2 k ×2 k (1=k=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的2×2方格(图2为其中缺右下角的一个),去覆盖2 k ×2 k 未被覆盖过的方格,求需要类似图2方格总

棋盘覆盖

时间限制: 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

? ? ?

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??


? ? ?

输入
第一行m表示有m组测试数据;
每一组测试数据的第一行有一个整数数k;
输出
输出所需个数s;
样例输入
3123
样例输出
1521
算法分析:

拆分的大数相乘问题,注意到求解的是2^2k次方==4^k,利用循环使大数不断乘4,记录每步的数值。代码如下:
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	while(n--)
	{
		int a[100];
		memset(a,sizeof(a));
		int size;
		cin>>size;
		a[0]=1;
		if(size==1)
			cout<<a[0]<<endl;
		int i,j,k;
		for(i=2;i<=size;++i)
		{
			for(j=0;j<100;++j)
				a[j]=4*a[j];
			a[0]++;
			for(j=0;j<99;++j)
			{
				a[j+1]+=a[j]/10;
				a[j]=a[j]%10;
			}
		}
		
		for(i=99;i>=0;--i)
			if(a[i]) break;
		for(j=i;j>=0;--j)
			cout<<a[j];
		cout<<endl;
	}
	return 0;
}        

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读