剑指offer--矩形覆盖

题目描述

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

class Solution {

      public:

              int rectCover(int number) {

       if(number<=0)

           return 0;

      if(number==1)

          return 1;

      if(number==2)

          return 2;

      int n1=1;

      int n2=2;

      int n3=0;

      int i=3;

      for(;i<=number;i++)

      {

         n3=n2+n1;

         n1=n2;

         n2=n3;

      }

     return n3;                                                                                                                                                      

                      }

  };

 这道题并不难,只要是想明白他所考我们的是什么就可以。2*n大小的大矩形,2*1大小的小矩形,小矩形填充大矩形。也就是小矩形放在大矩形的哪个位置第一个小矩形有n个位置,第二个有n-1个位置,依次类推,可以看出就是我们之前写过的斐波那契数列。

  斐波那契数列有两种实现方式一种是我上边用到的循环来实现,还有一种就是通过递归来实现。

https://blog.csdn.net/Hanani_Jia/article/details/79690612 之前介绍过斐波那契数列的两种实现方式。

  今天的题比较简单,这里我们加一个选择题

如有定义:char str[20];,能将从键盘输入的字符串“How are you”保存到 str 数组的语句是(   )

这几个是我们在写C语言程序的时候经常用到的语句,他们到底有什么区别。

首先说一下getch()和gets()getch是从键盘获得一个字符,他并不是一个字符串是字符,然后gets的正确用法是gets(字符数组名或指针),所以第四个选项的用法就是错误的,所以肯定要排除第二个和第四个选项。

 Scanf有一个很大的缺点就是他不能输入空格,但是gets函数可以。并且无论是gets也好还是scanf也好他们都会在字符串接受结束之后给字符串后加上一个\0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值