C++でMを法とする2つの数値の合計を求める方法
この問題では、3つの数値 a、b、M が与えられます。私たちの課題は、2つの数値の合計を M で割った余り(剰余)を求めるプログラムを作成することです。
問題を理解するための例
入力: a = 14, b = 54, m = 7 出力: 5 説明: 14 + 54 = 68、68 % 7 = 5
解法のアプローチ
この問題は非常にシンプルで、以下の手順で解くことができます。
まず、数値 a と b を足し合わせます。次に、その合計を M で割った余りを計算して出力します。C++では剰余演算子「%」を使用することで、簡単に余りを求めることができます。
実装例
解法の動作を示すプログラムは以下の通りです。
#include <iostream>
using namespace std;
int moduloSum(int a, int b, int M) {
return (a + b) % M;
}
int main() {
int a = 35, b = 12, M = 7;
cout << "The sum modulo is " << moduloSum(a, b, M);
return 0;
}出力
The sum modulo is 5
このプログラムでは、a = 35 と b = 12 の合計は 47 となり、47 を 7 で割った余りは 5 です。そのため、「The sum modulo is 5」が出力されます。
なお、a と b が非常に大きな数値になる場合、合計が int 型の範囲を超えてオーバーフローする可能性があります。そのようなケースでは、long long 型などより大きなデータ型を使用することを検討してください。
-
C++でN未満の2つの数の倍数の合計を求める方法
問題概要 この問題では、3つの整数 M1、M2、N が与えられます。求めるのは、N 未満に存在する M1 と M2 の倍数をすべて足し合わせた合計値です。 つまり、N 未満の数のうち、M1 または M2 の倍数に該当するものをすべて加算します。 問題を理解するための例 入力: N = 13, M1 = 4, M2 = 6 出力: 30 解説: 13 未満で 4 または 6 の倍数となる数は「4, 6, 8, 12」です。したがって合計は 4 + 6 + 8 + 12 = 30 となります。 解法1:シンプルな全探索アプローチ 最も基本的な解決策は、1 から N 未満まで順にループ処理を行い、M
-
C++で解くTwo Sum IV ― 二分探索木(BST)が入力の場合
問題概要 二分探索木(BST)とターゲット値が1つ与えられます。このとき、BST内に「2つの要素の和がターゲット値と等しくなる」ような組み合わせが存在するかどうかを判定するのが本問題です。 例えば、次のような木が入力として与えられた場合を考えてみましょう。 この場合、出力は True(真)となります。 解法のアプローチ この問題は、BSTを中間順(inorder)走査して昇順の配列を作り、その後「双方向ポインタ(two pointer)」を使うことで効率的に解けます。具体的には、以下の手順に従います。 値を格納するための配列 v を定義します。 関数 inorder() を定義します(引