【发布时间】:2018-10-07 09:48:59
【问题描述】:
三角形数是指事物可以排列成三角形的数字。
例如,1、3、6、10、15...是三角数。
o
o o
o o o
o o o o
是 n=4 三角形数的形状
我要做的是给定一个自然数 N,我必须打印 N用三角数之和表示。
如果 N = 4 输出应该是
1 1 1 1
1 3
3 1
否则,如果 N = 6 输出应该是
1 1 1 1 1 1
1 1 1 3
1 1 3 1
1 3 1 1
3 1 1 1
3 3
6
我已经搜索了几个小时,但找不到答案...
请帮忙。
(我不确定这是否有帮助,但我发现
如果我说当 n 为 k 时 T(k) 是三角数,那么
T(k) = T(k-1) + T(k-3) + T(k-6) + .... + T(k-p) 而 (k-p) > 0
而p是三角数)
这是 k=-1 的代码(阅读下面的 cmets)
#include <iostream>
#include <vector>
using namespace std;
long TriangleNumber(int index);
void PrintTriangles(int index);
vector<long> triangleNumList(450); //(450 power raised by 2 is about 200,000)
vector<long> storage(100001);
int main() {
int n, p;
for (int i = 0; i < 450; i++) {
triangleNumList[i] = i * (i + 1) / 2;
}
cin >> n >> p;
cout << TriangleNumber(n);
if (p == 1) {
//PrintTriangles();
}
return 0;
}
long TriangleNumber(int index) {
int iter = 1, out = 0;
if (index == 1 || index == 0) {
return 1;
}
else {
if (storage[index] != 0) {
return storage[index];
}
else {
while (triangleNumList[iter] <= index) {
storage[index] = ( storage[index] + TriangleNumber(index - triangleNumList[iter]) ) % 1000000;
iter++;
}
}
}
return storage[index];
}
void PrintTriangles(int index) {
// What Algorithm?
}
【问题讨论】:
-
由于我的英语不太好,非常感谢用简单的英语写的答案..
-
也许您与我们分享您的一些想法并告诉我们您遇到的问题。
-
您的问题并不完全清楚。您是否想要将
N写为三角数之和的所有 方式的打印输出?此外,你没有表现出你自己的真正努力。不要寻找答案;编写一些您自己的代码并向我们展示您的尝试。这让我们知道您的编程水平。例如,你了解递归吗? (这是一个提示,但我们确实需要知道这一点。)最后,您想要哪种计算机语言? -
@RoryDaulton 实际上整个问题是输入的 N 和 k,如果 k = -1 只打印可以表达多少种方式。如果 N=4 并且 k = -1 答案是 3。我在 k= -1 时解决了,但我不知道在 k = 1 时使用什么算法。我会尽快添加我的代码。
-
k 只是我应该打印所有组合还是只打印多少组合的标志。我正在尝试在我的问题中添加我的代码,但它一直说格式错误....
标签: math triangular