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

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

アナログ時計の時刻を表す「時(hour)」と「分(minute)」の2つの値が与えられたとき、時針と分針がなす角度のうち、小さい方の角度を求める問題です。

たとえば、hour = 12、minutes = 45 が入力された場合、答えは 112.5度 となります。

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

解き方の考え方

まず、それぞれの針がどれだけ回転するかを理解しましょう。時計盤は一周360度です。

  • 時針は12時間で360度回るため、1時間あたり30度動きます。さらに分の経過に合わせて少しずつ進むので、1分あたり0.5度ずつ移動します。
  • 分針は60分で360度回るため、1分あたり6度ずつ移動します。

この性質をもとに、以下の手順で角度を計算できます。

  1. h = 12 の場合は h を 0 に置き換えます

  2. m = 60 の場合は m を 0 に置き換えます

  3. 時針の角度:hAngle := 0.5 × ((60 × h) + m)

  4. 分針の角度:mAngle := 6 × m

  5. 2つの角度の差の絶対値:ret := |hAngle − mAngle|

最後に、ret と (360 − ret) のうち小さい方の値を返せば、それが時針と分針の間の小さい方の角度になります。

C++での実装例

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
    double solve(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.solve(12, 45));
}

入力

12, 45

出力

112.5
  1. C++で2つの数の最大公約数(GCD)を求めるプログラム

    最大公約数(GCD)とは最大公約数(GCD: Greatest Common Divisor)とは、2つの整数をどちらも割り切る正の整数のうち、最も大きい数のことです。プログラミングの基礎的なアルゴリズム問題としてよく取り上げられるテーマであり、分数の約分や暗号処理など、さまざまな場面で活用されます。例として、45と27という2つの数を考えてみましょう。45 = 5 × 3 × 327 = 3 × 3 × 3両方の数に共通する素因数は「3 × 3」であるため、45と27の最大公約数は9となります。方法1:ユークリッドの互除法による実装2つの数の最大公約数を求める最も効率的な方法が「ユークリッド

  2. 商と剰余を求めるC++プログラムの書き方を解説

    割り算には、被除数(ひじょすう)・除数・商・剰余という4つの要素が関わります。本記事では、これらの基本的な概念を整理したうえで、C++を使って商と剰余を求めるプログラムの作成方法をわかりやすく解説します。 商と剰余とは? まず、割り算を構成する各要素の役割を確認しましょう。 被除数(dividend):割られる数 除数(divisor):割る数 商(quotient):割り算を行った結果得られる値 剰余(remainder):割り算の後に残る数 これらの関係は、次の式で表されます。 被除数 = 除数 × 商 + 剰余 具体例 例として、15 を 7 で割ってみましょう。このとき、商は 2