NYOJ-45 棋盘覆盖
棋盘覆盖
- 描述
-
在一个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
1 /* 功能Function Description: NYOJ-45 2 开发环境Environment: DEV C++ 4.9.9.1 3 技术特点Technique: 4 版本Version: 5 作者Author: 可笑痴狂 6 日期Date: 20120821 7 备注Notes: 8 本题求的是大数(4^k-1)/3,可以转化为首项为1,公比为4的等比数列的前k项的和 9 把除法转化为加法和乘法。 10 */ 11 #include<stdio.h> 12 #include<string.h> 13 14 void mult(int *tmp,int num,int &bit) 15 { 16 int t=0; 17 for(int i=0;i<bit;++i) 18 { 19 t=tmp[i]*num+t; 20 tmp[i]=t%10; 21 t/=10; 22 } 23 if(t) 24 { 25 tmp[bit]=t; 26 ++bit; 27 } 28 } 29 30 void add(int *sum,int *tmp,int &bit) 31 { 32 int i,t=0; 33 for(i=0;i<bit;++i) 34 { 35 sum[i]+=tmp[i]; 36 sum[i+1]+=sum[i]/10; 37 sum[i]%=10; 38 } 39 if(sum[i]) 40 ++bit; 41 } 42 43 int main() 44 { 45 int k,T,i,bit; 46 int tmp[100]; //存放每一项的值 47 int sum[100]; //存放结果 48 scanf("%d",&T); 49 while(T--) 50 { 51 memset(tmp,0,sizeof(tmp)); 52 memset(sum,0,sizeof(sum)); 53 scanf("%d",&k); 54 tmp[0]=1; 55 sum[0]=1; 56 bit=1; 57 for(i=1;i<k;++i) 58 { 59 mult(tmp,4,bit); 60 add(sum,tmp,bit); 61 } 62 for(i=bit-1;i>=0;--i) 63 printf("%d",sum[i]); 64 printf("\n"); 65 } 66 return 0; 67 }
NYOJ-45 棋盘覆盖相关推荐
- NYOJ 45 棋盘覆盖
以为是分治法那个经典的例子,一看题才知道是大数 棋盘覆盖 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一 ...
- JAVA大数_棋盘覆盖
第一道: 传送门:NYOJ 45 棋盘覆盖 2^k*2^k=4^k,其实就是大数计算,-1后取3的倍数.问题本源出自<计算机算法设计与分析>的棋盘覆盖问题,原始解法是分治法,递推出公式f( ...
- [算法][递归] 棋盘覆盖
>_<: 问题描述: 在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘.在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖 ...
- 递归与分治之棋盘覆盖问题
在一个2^k * 2^k个方格组成的棋盘中,若有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一个特殊棋盘. 显然特殊方格在棋盘上出现的位置有4^k种情形.因而对任何k≥0,有4^k种不 ...
- 计算机基础算法棋盘覆盖,分治算法求解棋盘覆盖问题互动教学过程.doc
分治算法求解棋盘覆盖问题互动教学过程 分治算法求解棋盘覆盖问题互动教学过程 摘要:针对算法设计与分析课程难度较大.对学生编程能力要求较高的现状,通过对棋盘覆盖问题的分治算法求解过程进行互动教学设计,引 ...
- 棋盘覆盖问题原理及演示程序
说明:文章内容源自电子工业出版社<计算机算法设计与分析>一书. 演示程序由本人完成,新手请多指教! 在一个2^k * 2^k个方格组成的棋盘中,若恰有一个方格与其它方格不同,则称该方格为一 ...
- java棋盘问题_0x03大数问题(JAVA解决棋盘覆盖,A+B Problem II)
常见的有棋盘覆盖和A+B问题,这类问题牵扯到的数值都比较大,如果用一般的数值类型,肯定输出不了,所以就要想一个办法,怎么把大数转换一下输出. A+B Problem II 时间限制:3000 ms | ...
- 算法设计棋盘覆盖问题c语言,棋盘覆盖问题(用分治法求解)
// 棋盘覆盖 #include #include int Board[8][8]={0};//定义棋盘并初始化棋盘 void ChessBoard(int tr,int tc,int dr,int ...
- 算法设计与分析——递归与分治策略——棋盘覆盖
问题描述 棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,你给定任意一个特殊点,用一种方案实现对除该特殊点的棋盘实现全覆盖. 建立模型如图: 解决方案就是利用分治法,将方形棋盘分成4部分,如 ...
最新文章
- 比较全面的gdb调试命令
- 专注,专注,还是专注
- rpm包管理功能全解
- Apache配置文件的帮助查询
- springboot(三):Spring boot中Redis的使用
- 无人机图像处理工具-亮度、对比度、饱和度调整/匀光匀色/图像去雾
- 07 总结ProgressDialog 异步任务
- 干点大事!“覆盖25万人的AI资源对接平台”发布,找人、找技术不再难!
- 中油C语言第一次在线作业,中石油华东《程序设计(C语言)》2020年春季学期在线作业(二)...
- 设计师必备各类型3D字体图层样式PSD素材
- 华为交换机模拟器_从零开始学习华为路由交换 | 配置缺省静态路由
- mysql循环建表_MySQL 开发准则(总结自阿里巴巴开发手册)
- python opencv3 —— findContours
- safari里的touch事件解析
- 网页编码_Python获取网页编码(apparent_encoding)
- C语言面试部分知识点整理总结
- rpc服务器不可用自动重启,出现RPC服务器不可用的解决方法
- Java程序员 面试如何介绍项目经验? Java程序员应该如何介绍自己的项目经验和自我介绍?面试如何突出自己
- 十一长假我肝了这本超硬核PDF,现决定开源!!
- Python —— 列表的while循环遍历 、for循环遍历