質問の平行四辺形の中の三角形の個数の問題を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]
- 作者: 井上誠一郎,永井雅人
- 出版社/メーカー: 技術評論社
- 発売日: 2014/11/01
- メディア: 大型本
- この商品を含むブログ (4件) を見る
解ければ天才! 算数100の難問・奇問 たかが算数 されど算数 (ブルーバックス)
- 作者: 中村義作
- 出版社/メーカー: 講談社
- 発売日: 2013/11/08
- メディア: Kindle版
- この商品を含むブログを見る