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

Cプログラミングで行列をザグザグ形式で印刷します。


行列mat[row][col]が与えられた場合、以下の画像のように、与えられた行列をジグザグに印刷する必要があります-

Cプログラミングで行列をザグザグ形式で印刷します。

したがって、出力は次のようになります-

Output: 10 20 40 70 50 30 60 80 90

上記の問題については、行列を対角線上で反復し、反復の値を変更して、前のすべての一致の後に方向を変更する必要があるという単純なアプローチに従いました。

アルゴリズム

START
STEP 1-> DECALRE AND SET k = 3, l = 3
STEP 2-> DECLARE A MATRIX mat[][3]
STEP 3-> DECLARE AND SET row = 0, col = 0, flag = false;
STEP 4-> SET mn = MINIMUM(k, l)
STEP 5-> LOOP FOR len = 1 AND len <= mn AND ++len
   LOOP FOR i = 0 AND i < len AND ++i
      PRINT mat[row][col]
      IF i + 1 == len THEN,
         BREAK
      END IF
      IF flag THEN,
         INCREMENT row BY 1 AND DECREMENT col BY 1
      ELSE
         DECREMENT row BY 1 AND INCREMENT col BY 1
      END IF
   END FOR
   IF len == mn THEN,
      BREAK
   END IF
   IF flag THEN
      INCREMENT row BY 1 AND SET flag = FALSE
   ELSE
      INCREMENT col BY 1 AND SET flag = TRUE
   END IF
END FOR
STEP 6-> IF row == 0 THEN,
   IF col == k – 1 THEN,
      INCREMENT row BY 1
   ELSE
      INCREMENT col BY 1
   END IF
   SET flag = 1
   ELSE
      IF row == l – 1 THEN,
         INCREMENT col BY 1
      ELSE
         INCREMENT row BY 1
   SET flag = 0
END IF
STEP 7-> SET MAX = MAXIMUM(k, l) – 1
STEP 8-> LOOP FOR len, diag = MAX AND diag > 0 AND --diag
   IF diag > mn THEN,
      SET len = mn
   ELSE
   SET len = diag
   END IF
   FOR i = 0 AND i < len AND ++i
      PRINT mat[row][col]
   IF i + 1 == len THEN,
      BREAK
   END IF
   IF flag THEN,
      INCREMENT row BY 1 AND DECREMENT col BY 1
   ELSE
      INCREMENT col BY 1 AND DECREMENT row BY 1
   END IF
   IF row == 0 || col == k – 1 THEN,
      IF col == k - 1
         INCREMENT row BY 1
      ELSE
         INCREMENT col BY 1
      END IF
      SET flag = true
      ELSE IF col == 0 || row == l – 1 THEN,
         IF row == l – 1 THEN,
            INCREMENT col BY 1
         ELSE
            INCREMENT row BY 1
         END IF
         SET flag = false
      ENF IF
   END FOR
STOP

#include <stdio.h>
#include <stdbool.h>
#define C 3
#define min(a, b) a>b?b:a
#define max(a, b) a>b?a:b
int main(){
   int k = 3, l = 3;
   int mat[][3] = {
      { 10, 20, 30 },
      { 40, 50, 60 },
      { 70, 80, 90 }
   };
   int row = 0, col = 0;
   bool flag = false;
   int i, j, len, diag;
   int MAX;
   int mn = min(k, l); //to check the minimum number and return that minimum number
   for ( len = 1; len <= mn; ++len) {
      for ( i = 0; i < len; ++i) {
         printf("%d ", mat[row][col]); //Printing the matrix in zigzag format
         if (i + 1 == len)
            break;
         if (flag)
            ++row, --col;
         else
            --row, ++col;
      }
      if (len == mn)
         break;
      if (flag)
         ++row, flag = false;
      else
          ++col, flag = true;
   }
   if (row == 0) {
      if (col == k - 1)
         ++row;
      else
         ++col;
         flag = 1;
   } else {
      if (row == l - 1)
         ++col;
      else
         ++row;
      flag = 0;
   }
   MAX = max(k, l) - 1; //To check the maximum element
   for ( len, diag = MAX; diag > 0; --diag) { //Loop to go diagonally.
      if (diag > mn)
         len = mn;
      else
         len = diag;
      for ( i = 0; i < len; ++i) {
         printf("%d ", mat[row][col]);
         if (i + 1 == len)
            break;
         if (flag)
            ++row, --col;
         else
            ++col, --row;
      }
      if (row == 0 || col == k - 1) {
         if (col == k - 1)
            ++row;
         else
            ++col;
         flag = true;
      }
      else if (col == 0 || row == l - 1) {
         if (row == l - 1)
            ++col;
         else
            ++row;
         flag = false;
      }
   }
   return 0;
}

出力

このプログラムは出力を出力します-

10 20 40 70 50 30 60 80 90

  1. Cプログラムで行列の対角パターンで数値を印刷します。

    タスクは、対角パターンのnxnの行列を印刷することです。 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 x nの行列を生成

  2. Cプログラムで行列を斜め下向きに印刷します。

    サイズnxnの配列が与えられ、タスクは整数型の行列要素を対角線下に印刷することです。 斜め下向きとは、下の図のように、任意のサイズのnxnの配列を斜め下向きに印刷することを意味します- 最初に1を印刷し、次に2に移動して印刷し、対角線上に4に移動して、以下同様に印刷します。 例 Input: Matrix [3][3] = {    { 1, 2, 3 },    { 4, 5, 6 },    { 7, 8, 9 }} Output: 1 2 4 3 5 7 6 8 9 アルゴリズム int diagonally_down