質問の平行四辺形の中の三角形の個数の問題をJavaで解いてみた。

 質問の平行四辺形の中の三角形の個数の問題Javaで解いてみました。
 平行四辺形⊃正方形なので、平方四辺形を正方形とみなして、座標をi行j列として設定しました。
 「n×n」の正方形において、直角二等辺三角形の等しい辺の最大値はnになるので、大きさ1〜nの左上に凸の直角二等辺三角形と右下に凸の直角二等辺三角形の個数の合計をカウントしました。

※参考URL
●正三角形の個数
http://www004.upp.so-net.ne.jp/s_honma/number/number2.htm

● NumOfIsoRgtTriAng1.java

/* 
 * NumOfIsoRgtTriAng1.java
 * IsoRgtTriAng: Isosceles Right TriAngle
 * 
 *   0 1 2 ...→j列
 * 0・・・
 * 1・・・
 * 2・・・
 * :
 * ↓
 * i行
 */

class NumOfIsoRgtTriAng1 {
    // i行j列の点において、大きさ1〜nの直角二等辺三角形の個数の合計を求める
    static int getNumOfIsoRgtTriAng(int i, int j, int n) {
        int count = 0;
        for(int k = 1; k<=n; k++){
            if(0<=i+k && i+k<=n && 0<=j+k && j+k<=n)
                count++;    // 左上に凸の直角二等辺三角形の個数をカウント
            if(0<=i-k && i-k<=n && 0<=j-k && j-k<=n)
                count++;    // 右下に凸の直角二等辺三角形の個数をカウント
        }
        return(count);
    }

    public static void main(String[] args) {
        long tm=System.nanoTime();      // Timer Start

        for(int n : new int[] {2,4,10}){
            int count = 0;
            for(int i = 0; i<=n; i++)
                for(int j = 0; j<=n; j++)
                    count += getNumOfIsoRgtTriAng(i,j,n);
            System.out.printf("%2d×%2d : %d\n",n,n,count);
        }
        
        tm=System.nanoTime()-tm;        // Timer Stop
        System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9);
    }
}

●実行結果

 2× 2 : 10
 4× 4 : 60
10×10 : 770
Runtime : 0.021 [sec]

改訂2版 パーフェクトJava

改訂2版 パーフェクトJava