博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指OFFER之矩形覆盖(九度OJ1390)
阅读量:6277 次
发布时间:2019-06-22

本文共 1024 字,大约阅读时间需要 3 分钟。

题目描述:

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

 

输入:

输入可能包含多个测试样例,对于每个测试案例,

输入包括一个整数n(1<=n<=70),其中n为偶数。

 

输出:

对应每个测试案例,

输出用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有的方法数。

 

样例输入:

4

样例输出:

5

解题思路:

  观察题目中的矩形,2*n的,是个长条形。本来脑中想象的是复杂的华容道,但是既然只是简单的长条形,那么依然逆向分析。既然是长条形的,那么从后向前,最后一个矩形2*2的,只有两种情况:
   
第一种是最后是由一个2*(n-1)的矩形加上一个竖着的2*1的矩形
  另一种是由一个2*(n-2)的矩形,加上两个横着的2*1的矩形
  因此我们可以得出,
  第2*n个矩形的覆盖方法等于第2*(n-1)加上第2*(n-2)的方法。使用代码可以表示为:
for(i=3;i<71;i++){        arr[i] = arr[i-1]+arr[i-2];    }

  仍然要注意数据类型,为long long型

代码:

#include 
long long arr[71] = {
0,1,2};void createArr(void){ int i; for(i=3;i<71;i++){ arr[i] = arr[i-1]+arr[i-2]; }}int main(void){ int n; createArr(); while(scanf("%d",&n) != EOF && n>=1 && n<=70){ printf("%lld\n",arr[n]); } return 0;}/************************************************************** Problem: 1390 User: xhalo Language: C Result: Accepted Time:0 ms Memory:916 kb****************************************************************/

 

转载地址:http://ojyva.baihongyu.com/

你可能感兴趣的文章
搜索引擎原理
查看>>
java良好的编码习惯
查看>>
利用JasperReport+iReport进行Web报表开发
查看>>
C# 获取与解析枚举类型的 DescriptionAttribute
查看>>
WPF之Binding深入探讨
查看>>
HDU 4333 Revolving Digits 扩展KMP
查看>>
Spark JDBC入门测试
查看>>
AMD and CMD are dead之KMDjs内核之分号
查看>>
数据库SQL优化大总结之 百万级数据库优化方案
查看>>
手把手教你写专利申请书/怎样申请专利
查看>>
MVC - 12.HtmlHelper
查看>>
反调试技术揭秘
查看>>
Cache的使用
查看>>
Ubuntu14.04搭建LAMP环境
查看>>
angular学习笔记(三十)-指令(2)-restrice,replace,template
查看>>
Wordpress 音频播放器 Wordpress audio player with jQuery audioplayer.swf
查看>>
NLog类库使用探索——详解配置
查看>>
MyEclipse7.0破解下载
查看>>
c++单例
查看>>
UnitOfWork 更新实体出错解决办法
查看>>