Computer >> Máy Tính >  >> Lập trình >> lập trình C

In các số ở dạng đường chéo ma trận trong C Program.

Nhiệm vụ là in ma trận n x n của mẫu đường chéo.

Nếu n là 3 thì để in ma trận ở dạng Đường chéo là -

In các số ở dạng đường chéo ma trận trong C Program.

Vì vậy, đầu ra sẽ như thế nào -

In các số ở dạng đường chéo ma trận trong C Program.

Ví dụ

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

Bài toán gợi ý rằng chúng ta phải cho một số n và tạo ra một ma trận n x n và sau đó chúng ta phải duyệt ma trận theo một mô hình đường chéo và lưu trữ các giá trị trong một ma trận riêng biệt.

Nhưng điều này sẽ làm tăng độ phức tạp của mã của chúng tôi, vì vậy chúng tôi sẽ -

  • Tạo ma trận có kích thước N X N sẽ lưu mẫu trước khi in.

  • Lưu trữ các phần tử trong tam giác trên của mẫu. Theo quan sát, chỉ số hàng tăng 1 và chỉ số cột giảm 1 khi bạn di chuyển xuống đường chéo.

  • Sau khi hoàn thành tam giác trên, hãy lưu trữ các phần tử của tam giác dưới theo cách tương tự như tam giác trên, tức là chỉ số hàng tăng 1 và chỉ số cột giảm đi 1 khi bạn di chuyển xuống đường chéo.

Thuật toán

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

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy chương trình trên thì nó sẽ tạo ra kết quả sau -

1 2 4
3 5 7
6 8 9