私はまだ熟練したプログラマーではありませんが、これは面白い問題だと思っていました。プロジェクトオイラー45
三角形、五角形、六角形 番号は下記 式によって生成される:
- トライアングル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言語だけを知っているので、ネット上のソリューションを見つけるのが難しいです。とにかく誰かが助けることを願う。ここで私はそれはおそらく非常に遅く、ineffecientコードだが、それは私が唯一、それは私のコンピュータの数年かかる場合でも、次の番号を見つけることを気にし、この時点ではあまり私には関係しません実現私のコード
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");
}
}
}
}
}
です。
大丈夫です。私のコンピュータが私に結果を表示しない理由を知っていない:)しかしそれでもそれは完全にオフではないことを聞いて良い。 – Peter
@Peter: 'p'を計算する際に整数オーバーフローが発生している可能性があります。 'p = i *((3 * i - 1)/ 2)'の式で追加した余分な括弧を確認してください。私が括弧を削除すると、私のコードは無限ループに入ります。 – Blastfurnace
@marcog:あなたは私にそれを打つ、速く入力しなければならない... – Blastfurnace