c++ - 将数字表示为两个三角数之和

标签 c++ triangular

三角数或三角形数统计排列在等边三角形中的对象。
他们的公式是n(n + 1)/ 2。

我想写一个数字作为两个三角形数字的总和。 (24 = 21 + 3; 48 = 45 + 3)

我已经用C++编写了一些代码,对于较小的数字可以很好地做到这一点。但是随着N变大,它变得越来越慢,这使我认为我的代码效率低下或完全错误。因此,我要求提出建议。

我很乐意接受您的任何批评或想法。这是我想出的。

它生成数字“i”,并将x-i的值赋予“j”。它测试两个数字是否都是三角形的(iok,jok),如果是,则将它们打印出来并结束。如果找不到这样的数字,则会显示“NO”。

#include <iostream>

using namespace std;

int main(){
    long long x;
    cin>>x;
    long long j,i;
    int iok,jok;
    long sum;
    long long n;

    for(i=1;i<=x;i++){
        iok=0;
        sum=0;
        for (n=1; sum<=i; n++)
        {
            sum = sum + n;
            if (sum==i)
                iok=1;
        }
        j=x-i;
        jok=0;
        sum=0;
        for (n=1; sum<=j; n++)
        {
            sum = sum + n;
            if (sum==j)
                jok=1;
        }
        if(jok && iok){
            cout<<i<<" "<<j;
            return 0;
        }
    }
    cout<<"NO";
    return 0;
}

最佳答案

您的算法的时间复杂度为O(n ^ 2),但是您可以用一个循环,复杂度为O(n)来解决问题。对n进行迭代,创建第n个三角数,从输入中减去它,然后检查结果是否为三角数。 –托马斯·萨布利克

关于c++ - 将数字表示为两个三角数之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59593669/

相关文章:

c++ - 父进程没有完全从命名管道读取数据

c++ - enable_shared_from_this 需要什么?

c++ - 带有转发的延迟初始化

python - 在 python 中将下三角矩阵的索引作为一维列表的快速方法

list - Haskell 中的三角列表?

matlab - 如何在 MATLAB 中创建基于向量的三角矩阵?

c++ - 线性索引上三角矩阵

c++ - 在程序中捕获 C++0x 标志

R三角数函数

c++ - 为什么 G++ 不为不返回任何内容的模板方法生成警告?