C++で関係演算子を使わずに配列内の最小値を見つける方法
この記事では、n個の正の整数で構成される配列 arr[] が与えられたとき、関係演算子を使用せずに配列内の最小値を求める方法を解説します。
関係演算子とは
関係演算子(比較演算子)とは、プログラミングにおいて2つの値の大小関係や等価性を判定するために使用される演算子です。代表的なものとして、以下のようなものがあります。
- == (等しい)
- > (より大きい)
- < (より小さい)
問題の例
具体的な入力と出力の例を見てみましょう。
入力
arr[] = {4, 2, 5, 1, 7}出力
1
説明
配列の中で最も小さい要素は 1 です。
解決アプローチ
この問題を解く基本的な考え方は、ループ処理を使って配列内のすべての要素を順番に調べていくことです。
ここでのポイントは、2つの値のどちらが小さいかをどう判定するかです。関係演算子が使えないため、代わりに「両方の値から同時に1ずつ減算していき、先に0になった方が小さい値」という手法を利用します。
アルゴリズムの手順
- 配列の最初の要素を仮の最小値(minVal)として設定します。
- 残りの要素を順番に取り出し、現在のminValと減算法で比較します。
- 小さい方の値を新たなminValとします。
- すべての要素について繰り返し、最終的なminValを返します。
実装コード
上記の解決策をC++で実装したプログラムが以下です。
#include <iostream>
using namespace std;
int findMin(int a, int b) {
int minVal = 0;
while (a && b) {
minVal++;
a--;
b--;
}
return minVal;
}
int findMinimumElement(int arr[], int n) {
int minVal = arr[0];
int i = (n - 1);
while(i){
minVal = findMin(minVal, arr[i]);
i--;
}
return minVal;
}
int main() {
int arr[] = {4, 2, 5, 1, 7};
int n = sizeof(arr) / sizeof(arr[0]);
cout<<"The minimum element is "<<findMinimumElement(arr, n);
return 0;
}実行結果
The minimum element is 1
まとめ
このように、関係演算子を使わなくても、減算を繰り返すことで2つの値の大小を比較し、配列の最小値を求めることができます。ただし、この手法は値の差が大きい場合には減算の回数が増えるため、計算時間が長くなる点には注意が必要です。アルゴリズムの発想として興味深い例なので、面试対策やプログラミング学習の題材としてぜひ参考にしてください。
-
C++でSTLを使って配列の積を求める方法
C++では、STL(標準テンプレートライブラリ)のaccumulate関数を利用することで、配列内のすべての要素の積を簡潔に求めることができます。ここでは、その具体的な実装例を紹介します。 アルゴリズム 開始 配列の各要素の値を初期化する。 ユーザー定義関数 accumulate を呼び出し、配列全体の積を取得する。 計算結果を出力する。 終了 サンプルコード #include <iostream> #include <numeric> using namespace std; int ProductOfArray(int p[], int n)
-
C++で線形探索を使って配列の最小要素を求めるプログラム
本記事では、線形探索(リニアサーチ)の手法を用いて、配列内の最小要素を求めるC++プログラムを紹介します。このプログラムの計算量はO(n)です。線形探索は配列の先頭から順に要素を一つずつ確認していくシンプルなアルゴリズムであり、配列がソートされている必要がないため、どのような配列にも適用できるのが特徴です。 アルゴリズム 開始 データ要素を配列に格納する。 インデックス「0」の値を最小値変数に代入する。 最小値を他のデータ要素と順番に比較する。 最小値がそのインデックスの値より大きい場合は、値を更新する。 最小値を出力する。 終了 サンプルコード #includ