C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++】時計の短針と長針の間の角度を計算する方法

問題の概要

時(hour)と分(minutes)の2つの数値が与えられます。このとき、時計の短針と長針の間にできる角度のうち、小さい方の角度(度数法)を求めます。例えば、hour = 12、min = 30 が入力された場合、答えは 165° になります。

解法のアプローチ

この問題を解くには、以下の手順に従います。

  • h = 12 の場合は h := 0 とする

  • m = 60 の場合は m := 0 とする

  • hAngle := 0.5 × (60 × h) + m を計算する(短針の角度)

  • mAngle := 6 × m を計算する(長針の角度)

  • ret := |hAngle − mAngle| を求める

  • ret と (360 − ret) のうち小さい方を返す

計算式のポイント

長針は60分で360°回転するため、1分あたり 6° 進みます。一方、短針は12時間(720分)で360°回転するため、1分あたり 0.5° 進みます。したがって、短針の角度は「0.5 × (60 × h + m)」、長針の角度は「6 × m」で表されます。最後に2つの角度の差の絶対値を取り、その値が180°を超える場合は「360 − ret」の方が小さくなるため、両者のうち小さい方を結果として返します。

実装例(C++)

理解を深めるために、以下の実装例を見てみましょう。

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
    double angleClock(int h, int m) {
        if(h == 12) h = 0;
        if(m == 60) m = 0;
        double hAngle = 0.5*((60 * h) + m);
        double mAngle = 6 * m;
        double ret = abs(hAngle - mAngle);
        return min(360 - ret, ret);
    }
};
main(){
    Solution ob;
    cout << (ob.angleClock(12, 30));
}

入力

12
30

出力

165.00000
  1. C++で3次元空間における2つの平面間の角度を計算する方法

    本記事では、3次元空間内にある2つの平面 P1 と P2 の間の角度を求める方法を解説します。平面の方程式と角度の公式平面 Pi の方程式は、一般に次の形式で表されます。a・x + b・y + c・z + d = 0ここで、係数 (a, b, c) は平面の法線ベクトルを表しています。2つの平面がなす角度を「A」とすると、それぞれの法線ベクトルのなす角として、次の式で求められます。cos A = (a₁a₂ + b₁b₂ + c₁c₂) / (√(a₁² + b₁² + c₁²) × √(a₂² + b₂² + c₂²))つまり、分子は2つの法線ベクトルの内積、分母はそれぞれの法線ベクトルの大

  2. C++でアナログ時計の時針と分針の間の角度を求めるプログラム

    アナログ時計の時刻を表す「時(hour)」と「分(minute)」の2つの値が与えられたとき、時針と分針がなす角度のうち、小さい方の角度を求める問題です。たとえば、hour = 12、minutes = 45 が入力された場合、答えは 112.5度 となります。解き方の考え方まず、それぞれの針がどれだけ回転するかを理解しましょう。時計盤は一周360度です。時針は12時間で360度回るため、1時間あたり30度動きます。さらに分の経過に合わせて少しずつ進むので、1分あたり0.5度ずつ移動します。分針は60分で360度回るため、1分あたり6度ずつ移動します。この性質をもとに、以下の手順で角度を計算で