C++で行列(マトリックス)内の最大要素を求めるプログラム
この問題では、n×m のサイズを持つ行列(マトリックス)が与えられます。C++を使って、行列の中から最大の要素を見つけるプログラムを作成するのが課題です。
問題の説明
やるべきことはシンプルで、行列に含まれる要素の中から最も大きな値を求めるだけです。
それでは、具体的な例を使って問題を理解しましょう。
入力例
mat[3][3] = {{4, 1, 6},
{5, 2, 9},
{7, 3, 0}}
出力例
9
解き方のアプローチ
この問題の解法は非常にシンプルで、行列全体を走査するだけです。具体的には、二重のforループを使って行列の各要素を順番に調べ、各要素が現在の最大値 maxVal よりも大きいかどうかを確認します。より大きな要素が見つかった場合は、maxVal をその値で更新します。そして、すべての走査が終わった時点で maxVal を返します。
この手法の時間計算量は O(n×m) となり、行列のすべての要素を一度ずつ調べるため、任意のサイズの行列に対応できます。また、初期値を行列の先頭要素に設定しているため、負の値を含む行列でも正しく動作する点もポイントです。
サンプルプログラム
以下は、この解法の動作を示すC++プログラムです。
#include <iostream>
using namespace std;
#define n 3
#define m 3
// 行列内の最大値を求める関数
int CalcMaxVal(int mat[n][m]) {
int maxVal = mat[0][0]; // 初期値は先頭の要素
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (mat[i][j] > maxVal)
maxVal = mat[i][j]; // より大きい値があれば更新
return maxVal;
}
int main(){
int mat[n][m] = {{4, 1, 6},{5, 2, 9},{7, 3, 0}};
cout<<"The maximum element in a Matrix is "<<CalcMaxVal(mat);
return 0;
}
コードの解説
CalcMaxVal 関数では、まず行列の最初の要素 mat[0][0] を暫定の最大値として設定します。次に、外側のループで行方向、内側のループで列方向に要素をたどりながら、各要素と maxVal を比較していきます。現在の maxVal を上回る要素が見つかるたびに maxVal を更新し、全要素の確認が完了した時点の maxVal を結果として返します。
実行結果
The maximum element in a Matrix is 9
-
配列の分割(パーティション)手法でk番目に小さい要素を見つけるC++プログラム
本記事では、配列を分割(パーティション)する手法を用いて、配列内のk番目に小さい要素を求めるC++プログラムを解説します。この手法はクイックソートの考え方を応用したもので、配列全体をソートすることなく、目的の要素だけを効率的に特定できる点が特徴です。 アルゴリズム まず、ピボットを基準に配列を分割する CreatePartition() 関数と、その結果をもとにk番目に小さい要素が存在する範囲を再帰的に絞り込む Partition() 関数を使用します。 Begin 関数 CreatePartition() は 配列 a、下限 l、上限 h を引数にとる in := l、pi
-
PHPで配列内の最大要素を取得する方法
配列の中から最大の要素を求めるには、PHPでは関数を定義して各要素を順番に比較していく方法が一般的です。以下に、その実装例を紹介します。 サンプルコード <?php function get_max_value($my_array){ $n = count($my_array); $max_val = $my_array[0]; for ($i = 1; $i < $n; $i++) &nb