你有一些乐高塑料积木,所有积木都是 1x1x1。此外,您还有一块 1xN (N <= 80) 的瓷砖,您应该在其上放置乐高积木。您可以按顺序排列它们(如果有 3 个或更多连续砖块,则一个顺序是正确的),而且您必须在 2 个序列之间至少有 1 个空白空间。您应该计算可以将砖块放在瓷砖上的不同组合的数量。
这是一个例子:
如果瓷砖是 1x7,则有 17 种不同的组合。
输入:7 输出:17
(来源:mendo.mk)
此外,如果您没有积木,则将其计为 1 个组合。
我已经解决了这个问题,并且我找到了计算图块的最大长度是否为 14(3 个序列)的可能组合的方法。我发现它使用 for 循环。
我最大的问题是我需要运行大量的 for 循环。例如,对于 1 个序列,我使用 1 个 for 循环,对于 2 个序列,2 个循环 + 1 个用于 1 个序列......所以如果我使用所有 80 个砖块,我可以创建 20 个序列,我将不得不使用超过 210 个 for 循环,即数量巨大。因此,如果我可以将它们嵌套在一个中,那就太好了。我试过了,它变得一团糟,它没有给出正确的答案。
新代码:
#include <iostream>
using namespace std;
int main()
{
long long int places, combinations = 1;
cin >> places;
long long int f[80], g[80];
f[0] = 0;
f[1] = 0;
f[2] = 0;
g[0] = 1;
g[1] = 1;
g[2] = 1;
for(int i = 3; i<=places; i++)
{
f[i] = f[i-1] + g[i-3];
g[i] = f[i-1] + g[i-1];
}
combinations = f[places] + g[places];
cout << combinations;
return 0;
}