ITP1_10_B 三角形をC++で解いてみた[AIZU ONLINE JUDGE]

AIZU ONLINE JUDGE

こんにちは! mnbd(@mnbbbbbd)です。

AIZU ONLINE JUDGEの「ITP1_10_B 三角形」を解いてみましたので、その回答と解説をご紹介いたします。

プログラミング初心者なので、もっといい回答があるに違いありません。

あくまでも「動作はする」サンプルとしてご覧ください。

問題文

三角形の2辺 a, b とその間の角 C から、その三角形の面積 S、周の長さ L, a を底辺としたときの高さ h を求めるプログラムを作成して下さい。

Input

a の長さ, b の長さ, Cの大きさ(度)(整数)が空白区切りで与えられます。

Output

S, L, h をそれぞれ1行に出力して下さい。0.0001以下の誤差があってもよいものとします。

https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/10/ITP1_10_B

回答

#include <bits/stdc++.h>
using namespace std;

int main() {
    int a, b, C;
    cin >> a >> b >> C;
    double r = C / (180 / M_PI);

    double S = (double)(a * b * sin(r) / 2);
    double c = sqrt(pow(a, 2) + pow(b, 2) - 2 * a * b * cos(r));
    double L = (double)(a + b + c);
    double h = (double)(2 * S / a);

    cout << fixed << setprecision(20) << S << endl;
    cout << fixed << setprecision(20) << L << endl;
    cout << fixed << setprecision(20) << h << endl;

    return 0;
}

ハマったポイント

数学の問題なので、まったく記憶になく手も足も出ませんでした。

ネットで公式を調べて書いてます。

学んだこと

プログラミングと数学の関係はたびたび話題になりますが、こういう問題は数学を知らないとどうにもなりません。

どのようなら関数があるかということだけでも知っておくべきだなと思いました。

まとめ

AIZU ONLINE JUDGEの「ITP1_10_B 三角形」を解いてみましたので、その回答と解説をご紹介いたしました。

少しずつですが、プログラミングの勉強をしています。
まだ初心者ですが、よかったらつながっていただけると嬉しいです。
Twitterアカウント(@mnbbbbbd

以上です。
読んでいただきありがとうございました!