周長から斜辺以外の1辺を求める
直角三角形の各辺をa,b,cとする(cは斜辺)、周長をpとすると、
(1)
となる。
斜辺cはピタゴラスの定理により
よって(1)は
(2)
となる。
pとaの値が決まっていてbを求めたい場合、(2)から
(3)
(4)
というわけで(4)式を使ってbの値を決めることができる。
三角形になるかどうかの判定
p, a,それとさっき求めたbの値を使って三角形になるかどうかの判定は(3)式を使う
コード
using System.Diagnostics; namespace Problem39 { class Program { static void Main(string[] args) { P39 p = new P39(); Debug.WriteLine(p.Solve()); } } class P39 { /// <summary> /// コンストラクタ /// </summary> public P39() { } /// <summary> /// 解く /// </summary> /// <returns></returns> public int Solve() { int maxPatternCount = 0; int maxP = 1; for (int p = 1; p <= 1000; p++) { int patternCount = SetSides(p); if (patternCount > maxPatternCount) { maxPatternCount = patternCount; maxP = p; } } return maxP; } /// <summary> /// 斜辺以外の辺を決める /// </summary> /// <param name="p">週長</param> /// <returns>三角形になるパターン数</returns> private int SetSides(int p) { int patternCount = 0; for (int a = 1; a < p / 2; a++) { int b = (p * (2 * a - p)) / (2 * (a - p)); if (a > b) break; if (IsMakeTriangle(p, a, b) == true) { patternCount++; } } return patternCount; } /// <summary> /// 三角形になるか? /// </summary> /// <param name="p">周長</param> /// <param name="a">辺1</param> /// <param name="b">辺2</param> /// <returns></returns> private bool IsMakeTriangle(int p, int a, int b) { if (a * a + b * b == (p - a - b) * (p - a - b)) { //Debug.WriteLine(string.Format("{0},{1},{2}:{3}", a, b, a * a + b * b, a + b + Math.Sqrt(a * a + b * b))); return true; } return false; } } }
答え
840
思ったより多い。
キクタニ トライアングル 15cm 打棒・吊り皮付き T-15
- 出版社/メーカー: キクタニ
- メディア: エレクトロニクス
- クリック: 2回
- この商品を含むブログを見る
エーモン 三角停止板 国家公安委員会認定品(交F08-1) 6648
- 出版社/メーカー: エーモン工業(amonkogyo)
- 発売日: 2012/05/09
- メディア: Automotive
- 購入: 1人 クリック: 19回
- この商品を含むブログ (1件) を見る
- 作者: 久住昌之,久住卓也
- 出版社/メーカー: 小学館
- 発売日: 2014/02/24
- メディア: 大型本
- この商品を含むブログ (1件) を見る