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

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行目、3行目など)の場合:その行の要素を右から左へ出力します。

この規則を繰り返すことで、蛇が這うようにジグザグと要素を読み進める「スネークパターン」の出力が実現できます。

アルゴリズム

START
Step 1 -> 行数・列数を宣言するヘッダー定義を作成(ここでは4x4とする)
Step 2 -> 初期変数 i と j、および要素を持つ配列 arr[][] を宣言する
Step 3 -> i=0 から i<M まで繰り返すループを作成
    IF i%2==0 (偶数行の場合)
       j=0 から j<N まで繰り返し、arr[i][j] を出力
    ELSE (奇数行の場合)
       j=N-1 から j>=0 まで逆順に繰り返し、arr[i][j] を出力
STOP

C言語による実装例

#include<stdio.h>
#define M 4
#define N 4
int main() {
    int i,j;
    int arr[M][N] = {
        { 100, 99, 98, 97 },
        { 93, 94, 95, 96 },
        { 92, 91, 90, 89 },
        { 85, 86, 87, 88 }
    };
    for (i = 0; i < M; i++) { // 行の走査
        if (i % 2 == 0) {
            for (j = 0; j < N; j++) // 列を左から右へ
                printf("%d ",arr[i][j]);
        } else{
            for (j = N - 1; j >= 0; j--) // 列を右から左へ
                printf("%d ",arr[i][j]);
        }
    }
    return 0;
}

実行結果

上記のプログラムを実行すると、以下の出力が得られます。

100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85

このように、行ごとの走査方向を交互に入れ替えるだけで、元の配列データを変更することなくスネークパターンでの出力が可能になります。計算量はO(M×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ループを組み合わせることで出力できます。基本的な考え方はどのパターンも共通しており、違いはごくわずかです。ここからは、代表的なパターンのコードを実