分数(a/b)の分子と分母の両方に加えるΔXを求めて別の分数(c/d)へ変換するC++プログラム
このチュートリアルでは、与えられた等式を満たす ΔX の値を計算するプログラムを作成します。扱う等式は次のとおりです。
(a + ΔX) / (b + ΔX) = c / d
数式の導出手順
この問題を解くには、少し数学的な操作が必要ですが、考え方はとてもシンプルです。交叉乗算(たすき掛け)を行い、ΔX を一方の辺にまとめます。
- 両辺に分母を掛けます:
d × (a + ΔX) = c × (b + ΔX) - 展開します:
d·a + d·ΔX = c·b + c·ΔX - ΔX を左辺に、それ以外を右辺に移項します:
ΔX(d − c) = b·c − a·d
これにより、ΔX の値は次の式で求まります。
ΔX = (b×c − a×d) / (d − c)
a、b、c、d の値がすべて与えられているため、この式に代入するだけで ΔX を簡単に計算できます。
C++での実装例
それでは、実際のコードを見てみましょう。
#include <bits/stdc++.h>
using namespace std;
int findTheXValue(int a, int b, int c, int d) {
return (b * c - a * d) / (d - c);
}
int main() {
int a = 5, b = 2, c = 8, d = 7;
cout << findTheXValue(a, b, c, d) << endl;
return 0;
}
実行結果
上記のコードを実行すると、次の出力が得られます。
19
計算結果の検証
a=5、b=2、c=8、d=7 を式に代入すると、(2×8 − 5×7) / (7 − 8) = (16 − 35) / (−1) = 19 となり、確かに ΔX = 19 が得られます。検算してみると、(5+19)/(2+19) = 24/21 = 8/7 となり、c/d と一致することが確認できます。
まとめ
本チュートリアルでは、交叉乗算を使った簡単な数式変形により、分数の分子と分母に共通して加えるべき値 ΔX を求める方法を学びました。アルゴリズムの時間計算量は O(1)、空間計算量も O(1) と非常に効率的です。チュートリアルについてご不明な点があれば、コメント欄でお気軽にお知らせください。
-
C++で各都市から最寄り駅までの最大距離を求めるアルゴリズム
概要 0からN-1までの番号が付けられたN個の都市と、駅が設置されている都市のリストが与えられたとき、「任意の都市からその最寄り駅までの距離」の最大値を求めるのが本課題です。なお、駅のある都市は任意の順序で与えられる点に注意してください。 入力例 numOfCities = 6, stations = [2, 4] 出力 2 入力例 numOfCities = 6, stations = [4] 出力 4 1つ目の例では、6つの都市が存在し、駅がある都市が緑色で強調表示されています。この場合、最寄り駅から最も遠いのは都市0で、その距離は2です。したがって、最大距離は2となります。
-
【C/C++】const int* と int* const の違いを徹底解説!宣言の読み方のコツも紹介
はじめに:constとポインタの組み合わせ C/C++では、「const」と「ポインタ」を組み合わせた宣言が複数存在し、それぞれ意味が異なるため、初心者がつまずきやすいポイントの一つです。この記事では、代表的な4つのパターンを整理し、何が変更できて何が変更できないのかを具体例とともに解説します。 4つの基本パターン int* // intへのポインタ int const * // constなintへのポインタ int * const // intへのconstポインタ int const * const // con