我一直在尝试解决这个编程问题,但由于我无法弄清楚,我在网上找到了一个解决方案。但我真的不明白为什么该解决方案也有效..
n >= 0
任务是计算 3*n( ,n 是唯一的输入)矩形可以用多少种方式完全填充 2*1 多米诺骨牌。
例如(红线代表多米诺骨牌):
这是我在阅读课文时第一次在纸上画的,我看到 3*2 的矩形可以有三种可能的组合,如果 n 为奇数,则解为 0,因为没有办法然后填满整个矩形(一块永远不会被多米诺骨牌覆盖)。
所以我认为解决方案很简单3^n
,如果 n 是偶数,并且0
如果 n 是奇数。原来,我错了。
我在这里找到了一个相对简单的解决方案:
#include <iostream>
using namespace std;
int main()
{
int arr[31];
arr[0]=1;
arr[1]=0;
arr[2]=3;
arr[3]=0;
for(int i = 4; i < 31; i++) {
arr[i] = arr[i-2] * 4 - arr[i-4]; //this is the only line i don't get
}
int n;
while(1) {
cin >> n;
if(n == -1) {
break;
}
cout << arr[n] << endl;
}
return 0;
}
为什么这行得通?!