ITP1_10_B: Triangle

問題

ソースコード

#include <stdio.h>
#include <math.h>

double toRadian(int degree)
{
    return (degree / (180 / M_PI));
}

int main()
{
    int a, b, C;
    scanf("%d%d%d", &a, &b, &C);

    double S, L, h;
    S = (double)(a * b * sin(toRadian(C)) / 2);
    double c = sqrt(pow(a, 2) - 2*a*b*cos(toRadian(C)) + pow(b, 2));
    L = (double)(a + b + c);
    h = (double)(2 * S / a);
    printf("%lf\n%lf\n%lf\n", S, L, h);

    return 0;
}

WAの原因など

  • 面積(S)の求め方が分からない
    • 高校の参考書を引っ張り出してきて漸く S = (bcsinA)/2 という公式を思い出す
  • DegreeToRadianが分からない
  • Sの公式の下に 2S = a+b+c というヘロンの公式を発見する
    • ヘロンの公式は {a, b, c} ∈ N で成立するらしい
    • コーディング前計算で c = √(a2 - 2abcosθ + b2) を導出,実装 ←もっと賢い方法があれば教えてください