我还不是一个熟练的程序员,但我认为这是一个有趣的问题,我想我会尝试一下。
三角形、五边形和六边形
数字是由以下内容生成的
公式:
三角形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=286
、np=166
和nh=144
开始,计算出相应的三角形、五边形和六边形数。无论得到的数字是最小的,我们都会增加它的n
值继续这样做,直到所有的数字都相等,你有你的答案。
这个算法的python实现在我的计算机上0.1秒内运行。
代码的问题是溢出。当答案适合32位int
时,临时值i * (3 * i - 1)
在到达答案之前溢出使用64位long
值可以修复代码。