Math 用三角数和表示自然数

Math 用三角数和表示自然数,math,triangular,Math,Triangular,三角形数是指当事物可以排列成三角形时的事物数 例如,1,3,6,10,15。。。是三角形的数字 oooo0 p是三角形数) 下面是k=-1的代码(请阅读下面的注释) #include <iostream> #include <vector> using namespace std; long TriangleNumber(int index); void PrintTriangles(int index); vector<long> triangleNu

三角形数是指当事物可以排列成三角形时的事物数

例如,1,3,6,10,15。。。是三角形的数字

oooo 我要做的是,给定一个自然数N,然后打印出来 N表示为三角形数之和

如果N=4 输出应 1 13 31

如果N=6,则为其他 输出应 1 13 1.3.1 1.3.1 3.1 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的代码(请阅读下面的注释)

#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?
}
#包括
#包括
使用名称空间std;
长三角形编号(整数索引);
虚空打印三角形(整数索引);
矢量三角形列表(450)//(2提高的450功率约为200000)
矢量存储(100001);
int main(){
int n,p;
对于(int i=0;i<450;i++){
三角形列表[i]=i*(i+1)/2;
}
cin>>n>>p;

cout这里是一些递归Python 3.6代码,它打印输入目标的三角形数字的总和。在这个版本中,我优先考虑代码的简单性。您可能希望在输入值上添加错误检查,计算总和,存储列表,而不仅仅是打印列表,并将整个例程包装到一个函数中。Sett整理三角形数字列表也可以用更少的代码行来完成

您的代码通过“记忆”三角形数字(存储和重用它们,而不是在需要时总是计算它们)节省了时间,但恶化了内存使用情况。如果您愿意,您可以对总和列表执行相同的操作。也可以在动态编程风格中进行更多操作:查找
n=1
的总和列表,然后查找
n=2
等的总和列表。我将把所有这些留给您

""" Given a positive integer n, print all the ways n can be expressed as
the sum of triangular numbers.
"""
def print_sums_of_triangular_numbers(prefix, target):
    """Print sums totalling to target, each after printing the prefix."""
    if target == 0:
        print(*prefix)
        return
    for tri in triangle_num_list:
        if tri > target:
            return
        print_sums_of_triangular_numbers(prefix + [tri], target - tri)

n = int(input('Value of n ? '))

# Set up list of triangular numbers not greater than n
triangle_num_list = []
index = 1
tri_sum = 1
while tri_sum <= n:
    triangle_num_list.append(tri_sum)
    index += 1
    tri_sum += index

# Print the sums totalling to n
print_sums_of_triangular_numbers([], n)

由于我的英语不是很好,如果能用简单的英语写下答案,我将不胜感激。也许你可以与我们分享你的一些想法,并告诉我们你遇到了什么问题。你的问题并不完全清楚。你想要一份打印出的所有方法,可以将
N
写成三角数的和吗?此外,你也没有显示出答案你自己的努力。不要寻找答案;写一些你自己的代码并向我们展示你的尝试。这让我们知道你的编程水平。例如,你理解递归吗?(这是一个提示,但我们确实需要知道。)最后,你想要哪种计算机语言?@RoryDaulton实际上整个问题是输入N和k,如果k=-1,只需打印出可以表达多少种方式。如果N=4和k=-1,答案是3。当k=-1时我解决了问题,但当k=1时我不知道使用什么算法。我很快会添加代码。k只是一个标志,指示我是否应该打印所有组合或just打印多少。我试图在我的问题中添加我的代码,但它不断地说有错误的格式。。。。답변이 정말 도움이 많이 되었습니다. 제가 python을 깊게 배운것이 아니라 그런건지 잘 모르겠으나, 이것을 C++로 옮겨 작성하였을 때 이상한 결과를 도출해냅니다. 예를 들어, C++로 옮긴 코드에서 실행시켜보면 n=6일 때 <代码>11131313
이런식으로 출력이 됩니다. 재귀호출하면서 堆栈상에 어떠한 문제가 생긴것같은데, 왜 C++에서만 이런 문제가 발생하는지 잘 모르겠습니다.答案真的很有帮助。我不确定我是否在深入学习python,但我不知道是否是这样,但当我将其移动到c++时,我会得到奇怪的结果。例如,如果在移动到c++的代码中运行,当n=6时,
11111313输出。我有一个递归调用,我怀疑有堆栈有问题,但我不知道为什么它只发生在c++中(翻译版本。很抱歉英语不好)。非常感谢。我错过的是当使用三角形数字的打印和(前缀+[tri],目标-tri)时,我只是推回向量,并像这样编写函数(pushedVec,目标-tri).我通过不推回而是生成另一个向量来解决,该向量仅用于浓缩并发送到函数中。
Value of n ? 4
1 1 1 1
1 3
3 1

Value of 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