题目描述
我们可以用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个位置,依次类推,可以看出就是我们之前写过的斐波那契数列。
斐波那契数列有两种实现方式一种是我上边用到的循环来实现,还有一种就是通过递归来实现。
今天的题比较简单,这里我们加一个选择题
如有定义:char str[20];,能将从键盘输入的字符串“How are you”保存到 str 数组的语句是( )
这几个是我们在写C语言程序的时候经常用到的语句,他们到底有什么区别。
首先说一下getch()和gets()getch是从键盘获得一个字符,他并不是一个字符串是字符,然后gets的正确用法是gets(字符数组名或指针),所以第四个选项的用法就是错误的,所以肯定要排除第二个和第四个选项。
Scanf有一个很大的缺点就是他不能输入空格,但是gets函数可以。并且无论是gets也好还是scanf也好他们都会在字符串接受结束之后给字符串后加上一个\0;