Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

n×n行列を対角線パターンで出力する方法【C++実装例つき】


問題の概要

n×n の2次元配列が与えられたとき、その行列から主対角線(左上→右下)反対角線(右上→左下)の要素を取り出して出力することが課題です。

例えば、以下のような4×4の行列を考えてみましょう。

入力 : arr[4][4]={1,2,3,4,
    5,6,7,8,
    9,10,11,12
    13,14,15,16}

出力 : 1 6 11 16 4 7 10 13

「1 6 11 16」は主対角線上の要素、「4 7 10 13」は反対角線上の要素に対応します。

n×n行列を対角線パターンで出力する方法【C++実装例つき】

アルゴリズム

処理の流れは非常にシンプルで、2回のループでそれぞれの対角要素を順に出力するだけです。

START
Step 1 -> 変数 r=4、c=4、i、j を宣言する
Step 2 -> mat[r][c] として行列を初期化する
Step 3 -> i=0 から i<r までループし、
    mat[i][i](主対角線の要素)を出力する
Step 4 -> 改行コード \n を出力する
Step 5 -> i=0 から i<r までループし、
    mat[i][4-1-i](反対角線の要素)を出力する
End
STOP

ポイントは、主対角線では行番号と列番号が等しくなる(i == j)という性質と、反対角線では列番号が (サイズ - 1) - 行番号 になるという性質を使っている点です。

C++による実装例

#include<iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
    int R=4,C=4,i,j;
    int mat[R][C] = { {1,2,3, 4}, {5,6,7,8},{9,10,11,12},{13,14,15,16}};
    // 主対角線の要素を出力
    for(i=0;i<R;i++) {
        cout<<mat[i][i]<<" ";
    }
    cout<<"\n";
    // 反対角線の要素を出力
    for(i=0;i<R;i++) {
        cout<<mat[i][4-1-i]<<" ";
    }
}

実行結果

上記のプログラムを実行すると、次のような出力が得られます。

1 6 11 16
4 7 10 13

1行目が主対角線の要素(mat[0][0]、mat[1][1]、mat[2][2]、mat[3][3])、2行目が反対角線の要素(mat[0][3]、mat[1][2]、mat[2][1]、mat[3][0])です。

まとめ

このように、行列の対角要素の出力はインデックスの規則性を利用すれば、時間計算量 O(n) のシンプルなループで実現できます。正方行列を扱う際の基本的なテクニックなので、ぜひ覚えておきましょう。


  1. Cプログラムで指定された配列から下三角行列パターンを出力する方法

    n×n の行列が与えられたとき、その行列を下三角行列(下三角形パターン)の形で出力するのが本記事のテーマです。下三角行列とは、主対角線より下の要素(主対角線上の要素を含む)が元の値をそのまま保持し、主対角線より上の要素がすべて 0 になった行列のことです。次の図を見ると理解しやすくなります。図の緑色の要素は主対角線より下(および主対角線上)の要素で、元の値がそのまま残ります。一方、赤色の要素は主対角線より上の要素で、すべて 0 に設定されます。入力と出力の例入力: matrix[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9

  2. Pythonでパターンを出力する方法|三角形・数字・アルファベット・ピラミッドのコード例

    Pythonでパターンを出力するには、ネストされた(入れ子構造の)forループを使用します。外側のループで行数を制御し、内側のループで列数を処理します。そしてprint文を工夫することで、目的に応じたさまざまなパターンを作成できます。パターンには、星(アスタリスク)パターン、数字パターン、アルファベットパターンなどがあり、三角形やピラミッドなど、さまざまな形状にも対応できます。パターン出力の基本これらのパターンは、print文を少し変更しながらforループを組み合わせることで出力できます。基本的な考え方はどのパターンも共通しており、違いはごくわずかです。ここからは、代表的なパターンのコードを実