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

C++で3つの数値の共通比(連比)を求めるプログラム

この記事では、x:yy:z という2つの比が与えられたときに、3つの数値の共通比(連比)x:y:z を求める C++ プログラムを紹介します。

問題の概要

与えられた2つの比をもとに、3つの数値 x、y、z の連比 x:y:z を導き出すことが課題です。

入力例

3:5 8:9

出力例

24 : 40 : 45

考え方

ここでは、x:y と y:z という2つの異なる比が与えられています。連比 x:y:z を作成するには、両方の比で中央の値 y を同じ数値に揃える必要があります。そのために用いるのが「たすき掛け(クロス乗算)」です。

具体的には、1つ目の比の各項に y₂ を、2つ目の比の各項に y₁ を掛けることで、次の形の連比が得られます。

x × y₂ : y₁ × y₂ : y₁ × z

先ほどの例に当てはめると、3×8 : 5×8 : 5×9 = 24 : 40 : 45 が求める連比となります。

解法アプローチ

上記の例のように、両方の比で中央の要素 y を共通化する必要があります。単純なたすき掛けでも計算は可能ですが、入力値によっては結果の数値が不必要に大きくなってしまうことがあります。

そこでより効率的な方法として、最小公倍数(LCM) を利用するアプローチがあります。y₁ と y₂ の最小公倍数 L を求め、連比を以下の式で計算します。

(x × L) / y₁ : L : (z × L) / y₂

この方法なら、可能な限り小さい整数のまま連比を表現できます。

プログラム例

#include <iostream>
using namespace std;
int calcLcm(int a, int b){
    int lcm = 2;
    while(lcm <= a*b) {
        if( lcm%a==0 && lcm%b==0 ) {
            return lcm;
            break;
        }
        lcm++;
    }
    return 0;
}
void calcThreeProportion(int x, int y1, int y2, int z){
    int lcm = calcLcm(y1, y2);
    cout<<((x*lcm)/y1)<<" : "<<lcm<<" : "<<((z*lcm)/y2);
}
int main() {
    int x = 12, y1 = 15, y2 = 9, z = 16;
    cout<<"The ratios are\t"<<" x:y = "<<x<<":"<<y1<<"\ty:z = "<<y2<<":"<<z<<endl;
    cout<<"The common ratio of three numbers is\t";
    calcThreeProportion(x, y1, y2, z);
    return 0;
}

実行結果

The ratios are x:y = 12:15 y:z = 9:16
The common ratio of three numbers is 36 : 45 : 80

プログラムのポイント

calcLcm 関数は、総当たり方式で2つの整数の最小公倍数を求めています。calcThreeProportion 関数では、その最小公倍数を利用して中央の値を統一し、3つの数値からなる連比を計算して出力します。

この例では、LCM(15, 9) = 45 となるため、連比は (12×45)/15 : 45 : (16×45)/9 = 36 : 45 : 80 と計算されます。たすき掛けで直接計算した場合(180 : 225 : 400)と比べて、よりシンプルな整数比が得られる点がこの手法の利点です。

  1. C++で三角形の重心を求めるプログラムの作成方法

    この記事では、三角形の3つの頂点の座標を格納した2次元配列が与えられたときに、その三角形の重心を求めるC++プログラムの作成方法を解説します。 三角形の重心とは、三角形の3本の中線がすべて交わる点のことです。 また、三角形の中線とは、ある頂点と、その対辺(向かい合う辺)の中点を結ぶ線分のことを指します。 それでは、具体的な例を使って問題を確認してみましょう。 入力 (-3, 1), (1.5, 0), (-3, -4) 出力 (-1.5, -1) 説明 重心 (x, y) = ((-3 + 1.5 - 3) / 3, (1 + 0 - 4) / 3) = (-1.5, -1) 解法のアプロ

  2. C++で平行四辺形の面積を求めるプログラムの作成方法

    この記事では、平行四辺形の底辺と高さを表す2つの値が与えられたとき、C++を使ってその面積を求めるプログラムを作成する方法を解説します。 平行四辺形とは? 平行四辺形とは、4つの辺からなる閉じた図形であり、向かい合う2組の辺がそれぞれ長さが等しく、互いに平行になっている四角形のことです。 問題を理解するための具体例 入力 B = 20, H = 15 出力 300 説明 平行四辺形の面積 = 底辺 × 高さ = 20 × 15 = 300 解決アプローチ この問題を解くには、平行四辺形の面積を求める幾何学の公式を使用します。 面積 = 底辺 × 高さ つまり、与えられた底辺と高さを掛け合わせ