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à -
Vì vậy, đầu ra sẽ như thế nào -
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