我还不是一个熟练的程序员,但我认为这是一个有趣的问题,我想我会尝试一下。
三角形、五边形和六边形
数字是由以下内容生成的
公式:
三角形t_(n)=n(n+1)/2
1,3,6,10,15,…
五边形P(n)=n(3n−1)/21、5、12、22、35,

六角h_(n)=n(2n−1)1,
6,15,28,45。。。
可以证明t_=
P(165)=H(143)=40755。
找到下一个三角形编号
也有五边形和六边形。
是任务描述。
我知道六边形数是三角形数的子集,这意味着你只需要找到一个hn=pn的数。
但我似乎无法让我的代码工作。我只懂java语言,这就是为什么我在网上找不到解决方案的原因不管怎样,希望有人能帮忙。这是我的密码

public class NextNumber {

    public NextNumber() {
    next();
    }

    public void next() {


int n = 144;
int i = 165;
int p = i * (3 * i - 1) / 2;
int h = n * (2 * n - 1);
        while(p!=h) {
            n++;
           h = n * (2 * n - 1);

            if (h == p) {
                System.out.println("the next triangular number is" + h);
            } else {
                while (h > p) {
                    i++;
                    p = i * (3 * i - 1) / 2;
                }
                if (h == p) {
                    System.out.println("the next triangular number is" + h); break;
                    }
                 else if (p > h) {
                    System.out.println("bummer");
                }
            }

            }

    }
}

我意识到这可能是一个非常缓慢和不熟练的代码,但这与我无关,在这一点上,我只关心找到下一个数字,即使它将需要我的计算机年。

最佳答案

我们知道T285=P165=H143=40755我们从nt=286np=166nh=144开始,计算出相应的三角形、五边形和六边形数。无论得到的数字是最小的,我们都会增加它的n值继续这样做,直到所有的数字都相等,你有你的答案。
这个算法的python实现在我的计算机上0.1秒内运行。
代码的问题是溢出。当答案适合32位int时,临时值i * (3 * i - 1)在到达答案之前溢出使用64位long值可以修复代码。

09-05 22:15