Cプログラムで指定された配列から下三角行列パターンを出力する方法
n×n の行列が与えられたとき、その行列を下三角行列(下三角形パターン)の形で出力するのが本記事のテーマです。
下三角行列とは、主対角線より下の要素(主対角線上の要素を含む)が元の値をそのまま保持し、主対角線より上の要素がすべて 0 になった行列のことです。
次の図を見ると理解しやすくなります。

図の緑色の要素は主対角線より下(および主対角線上)の要素で、元の値がそのまま残ります。一方、赤色の要素は主対角線より上の要素で、すべて 0 に設定されます。
入力と出力の例
入力: matrix[3][3] = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 } }
出力:
1 0 0
4 5 0
7 8 9アルゴリズム
処理の流れは非常にシンプルです。行番号 i と列番号 j を比較し、i < j(主対角線より上)であれば 0 を出力し、それ以外では元の要素の値を出力します。
int lower_mat(int mat[n][m])
START
STEP 1: 変数 i と j を宣言する
STEP 2: i = 0 から i < n の間、以下を繰り返す
j = 0 から j < m の間、以下を繰り返す
IF i < j THEN
"0\t" を出力
ELSE
mat[i][j] を出力
END IF
END FOR
改行を出力
END FOR
STOPC言語での実装例
#include <stdio.h>
#define n 3
#define m 3
int lower_mat(int mat[n][m]){
int i, j;
for ( i = 0; i < n; i++){
for ( j = 0; j < m; j++){
if( i < j )
printf("0\t");
else
printf("%d\t", mat[i][j]);
}
printf("\n");
}
}
int main(int argc, char const *argv[]){
int mat[n][m] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
lower_mat(mat);
return 0;
}実行結果
上記のプログラムをコンパイルして実行すると、次のような出力が得られます。
1 0 0 4 5 0 7 8 9
このように、二重ループと条件分岐を組み合わせるだけで、行列を下三角行列のパターンに変換して表示できます。時間計算量は O(n×m)、この例では O(n²) となり、行列のすべての要素を一度ずつ走査する効率的な方法です。
-
C++で行列の各列の0の個数に基づいて列をソートし、インデックスを出力する方法
N行M列のサイズを持つ行列が与えられたとき、各列に含まれる0の個数を数え、その個数に基づいて列をソートし、ソート後の列のインデックスを出力するのが課題です。 例えば、1列目に0が1つ含まれ、2列目には0がまったく含まれず、3列目に0が2つ含まれている場合、0の少ない順に並べると出力は「2 1 3」になります。 入力例と出力例 Input: 0 0 0 1 1 1 1 0 1 Output: 1 3 2 解説 上記の入力における各列の0の個数は次のとおり
-
C++で行列が下三角行列かどうかを判定するプログラム
行数 r と列数 c が等しい(r = c)正方行列 M[r][c] が与えられたとき、その行列 M が「下三角行列」であるかどうかを判定する方法を解説します。 下三角行列とは 下三角行列とは、主対角線(およびその下側)の要素が非ゼロであり、主対角線より上側の要素がすべてゼロである行列のことです。 次の図の例を見てみましょう。 上の図で赤く強調されている要素は主対角線より上側の要素で、これらはすべてゼロになっています。それ以外の要素は非ゼロです。 入力例と出力例 Input: m[3][3] = { {1, 0, 0}, {2, 3, 0}, &nbs