体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

数学の問題をプログラミングで解こう!「コード・トライアスロン2」問題解説

第1問:ラングレーの問題

四角形ABCDについて、∠ABD=a,∠CBD=b,∠ACB=c,∠ACD=d とおきます。

∠ADB を求めることを考えましょう。

例えば、a=30°,b=50°,c=40°,d=40°のとき、∠ADB=30°となります。

数学の問題をプログラミングで解こう!「コード・トライアスロン2」問題解説

さて、a,b,c,d の値(単位は度)に対し、∠ADB の値(単位は度)を 106 倍したものの整数部分を F(a,b,c,d) と定義します。

例えば、F(30,50,40,40)=30000000 です。
同様に、F(20,60,50,20)=50000000,F(45, 40, 10, 95)=4515341,F(70, 30, 50, 50)=62122012,F(30, 50, 90, 15)=133176131 となることが示せます。

F(a,b,c,d) を求めるプログラムを書いてください。

―――――

「ラングレーの問題」という平面幾何の問題を題材にしました。一見、簡単そう?と思ってノートに図を描いてみるものの、さっぱり手が進まず、困った方もおられたかもしれません。実はこの問題、a,b,c,d の組み合わせによっては補助線を引いたりすることで解けるのですが、中学校の初等幾何の範囲で一般的に解くやり方は知られていません。

そこで本問では、高校範囲の数学を使って一般的な解法を得る必要があります。

話を簡単にするために、BC の長さを 1 とします。まず、⊿ABCと⊿BCDに正弦定理を用います。

数学の問題をプログラミングで解こう!「コード・トライアスロン2」問題解説

移行して整理すると、AB と BD は次のように表されます。

数学の問題をプログラミングで解こう!「コード・トライアスロン2」問題解説

次に、⊿ABDに余弦定理を用います。∠ADB=x としています。

数学の問題をプログラミングで解こう!「コード・トライアスロン2」問題解説

それぞれ AD と x について整理します。

数学の問題をプログラミングで解こう!「コード・トライアスロン2」問題解説

参考:正弦定理(Wikipedia)

参考:余弦定理(Wikipedia)

参考:整角四角形問題(ラングレーの問題)(外部サイト)

これで全ての準備が整いました。与えられた a,b,c,d を使って AB と BD を求め、さらに AD を求めれば x が計算できます。さらにそれを整数値にキャストすればそれが答えです。コード例を以下に示します(C++)。度数法と弧度法の変換に気をつけましょう。

#include
#define PI 3.1415926535897932384626433832795

double Sin(int x) {
return sin(x / 180.0 * PI);
}

1 2次のページ
CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。