Cプログラムで行列を対角パターンに沿って数値出力する方法
この課題は、n×nの行列を対角パターンで出力することです。
例えば n が 3 の場合、対角パターンに従って行列を出力すると、次のような配置になります。

そして、実際の出力結果は以下の通りです。

実行例
Input: 3
Output:
1 2 4
3 5 7
6 8 9
Input: 4
Output:
1 2 4 7
3 5 8 11
6 9 12 14
10 13 15 16
考え方
一見すると、「数値 n を受け取り n×n の行列を生成し、それを対角方向に走査しながら別の行列へ値を格納する」というアプローチが思い浮かびます。
しかしこの方法では処理が二重になり、コードの複雑度が上がってしまいます。そこで、より効率的な以下の手順を採用します。
まず、パターンを格納しておくための N×N サイズの行列を用意します。
パターンの上三角部分から要素を格納していきます。対角線に沿って左下へ進むたびに、行インデックスは 1 ずつ増加し、列インデックスは 1 ずつ減少するという規則性があります。
上三角部分が完成したら、下三角部分も同じ規則(行インデックス +1、列インデックス -1)に従って残りの要素を格納します。
アルゴリズム
int printdiagonal(int n)
START
STEP 1: DECLARE int mat[n][n], i, j, k, d=1, m
STEP 2: LOOP FOR i = 0 AND i < n AND i++
ASSIGN j AS i AND k AS 0
LOOP FOR j = i AND j >= 0 AND j--
ASSIGN mat[k][j] AS d
INCREMENT d AND k BY 1
END LOOP
END LOOP
STEP 3: LOOP FOR k = 1 AND k < n AND k++
ASSIGN i AND m EQUALS TO k
LOOP FOR j = n-1 AND j >= m AND j--
ASSIGN mat[i][j] AS d;
INCREMENT d AND i WITH 1
END FOR
END FOR
STEP 4: LOOP FOR i = 0 AND i < n AND i++
LOOP FOR j = 0 AND j < n AND j++
PRINT mat[i][j]
END FOR
PRINT NEWLINE
END FOR
STOP
C言語による実装例
#include <stdio.h>
int printdiagonal(int n){
int mat[n][n], i, j, k, d=1, m;
/* 上三角部分への格納 */
for ( i = 0; i < n; i++){
j = i;
k = 0;
for ( j = i; j >= 0; j--){
mat[k][j] = d;
d++;
k++;
}
}
/* 下三角部分への格納 */
for ( k = 1; k < n; k++){
i = m = k;
for ( j = n-1; j >= m; j--){
mat[i][j] = d;
d++;
i++;
}
}
/* 結果の出力 */
for ( i = 0; i < n; i++){
for(j = 0; j < n; j++){
printf("%d ", mat[i][j] );
}
printf("\n");
}
}
int main(int argc, char const *argv[]){
int n = 3;
printdiagonal(n);
return 0;
}
実行結果
上記のプログラムをコンパイルして実行すると、次の出力が得られます。
1 2 4 3 5 7 6 8 9
-
C言語でスネークパターン(蛇行順)に行列を出力する方法
n×nサイズの2次元配列が与えられたとき、要素の元の位置を一切変更せずに、スネークパターン(蛇行する順序)で配列の要素を出力するCプログラムを紹介します。例入力: arr[]= 100 99 98 97 93 94 95 96 92 91 90 89 85 86 87 88 出力: 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85このプログラムでは、行列の各行を順番に走査し、その行が偶数行か奇数行かを判定することで処理を切り替えます。偶数行(0行目、2行目など)の場合:その行の要素を左から右へ出力します。奇数行(1行
-
Cプログラムで指定された配列から下三角行列パターンを出力する方法
n×n の行列が与えられたとき、その行列を下三角行列(下三角形パターン)の形で出力するのが本記事のテーマです。下三角行列とは、主対角線より下の要素(主対角線上の要素を含む)が元の値をそのまま保持し、主対角線より上の要素がすべて 0 になった行列のことです。次の図を見ると理解しやすくなります。図の緑色の要素は主対角線より下(および主対角線上)の要素で、元の値がそのまま残ります。一方、赤色の要素は主対角線より上の要素で、すべて 0 に設定されます。入力と出力の例入力: matrix[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9