我虽然不是一名熟练的程序员,但我认为这是一个有趣的问题,我想试着解决一下。
三角形数、五边形数和六边形数由以下公式生成:
- 三角形数 T_(n)=n(n+1)/2 1, 3, 6, 10, 15, ...
- 五边形数 P_(n)=n(3n−1)/2 1, 5, 12, 22, 35, ...
- 六边形数 H_(n)=n(2n−1) 1, 6, 15, 28, 45, ...
可以验证 T_(285) = 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");
}
}
}
}
}
我知道这可能是一段非常缓慢和低效的代码,但目前我并不太关心这个问题,我只关心找到下一个数字,即使这需要我的计算机花费数年时间。