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」は反対角線上の要素に対応します。

アルゴリズム
処理の流れは非常にシンプルで、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) のシンプルなループで実現できます。正方行列を扱う際の基本的なテクニックなので、ぜひ覚えておきましょう。
-
Cプログラムで指定された配列から下三角行列パターンを出力する方法
n×n の行列が与えられたとき、その行列を下三角行列(下三角形パターン)の形で出力するのが本記事のテーマです。下三角行列とは、主対角線より下の要素(主対角線上の要素を含む)が元の値をそのまま保持し、主対角線より上の要素がすべて 0 になった行列のことです。次の図を見ると理解しやすくなります。図の緑色の要素は主対角線より下(および主対角線上)の要素で、元の値がそのまま残ります。一方、赤色の要素は主対角線より上の要素で、すべて 0 に設定されます。入力と出力の例入力: matrix[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9
-
Pythonでパターンを出力する方法|三角形・数字・アルファベット・ピラミッドのコード例
Pythonでパターンを出力するには、ネストされた(入れ子構造の)forループを使用します。外側のループで行数を制御し、内側のループで列数を処理します。そしてprint文を工夫することで、目的に応じたさまざまなパターンを作成できます。パターンには、星(アスタリスク)パターン、数字パターン、アルファベットパターンなどがあり、三角形やピラミッドなど、さまざまな形状にも対応できます。パターン出力の基本これらのパターンは、print文を少し変更しながらforループを組み合わせることで出力できます。基本的な考え方はどのパターンも共通しており、違いはごくわずかです。ここからは、代表的なパターンのコードを実