Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C พิมพ์ตัวเลขในเมทริกซ์แบบ Diagonal Pattern

โจทย์

สร้างเมทริกซ์ n×n แล้วเติมตัวเลข 1 ถึง n² ในรูปแบบ Diagonal (ทแยงมุม) แล้วพิมพ์เมทริกซ์

ตัวอย่าง

n = 3:
1 2 4
3 5 7
6 8 9

n = 4:
1  2  4  7
3  5  8 11
6  9 12 14
10 13 15 16

สังเกตรูปแบบ

เติมตามแนวทแยงมุม (diagonal) จากมุมซ้ายบน:

  • Upper triangle: เริ่มแถว 0 คอลัมน์ i (i=0..n-1) เดินลงซ้าย (row++, col--) จน col=0
  • Lower triangle: เริ่มแถว k คอลัมน์ n-1 (k=1..n-1) เดินลงซ้าย (row++, col--) จน col=k

อัลกอริทึม

  1. สร้างเมทริกซ์ mat[n][n], ตัวนับ d = 1
  2. Upper triangle: for i=0..n-1, j=i..0, k=0..i: mat[k][j] = d++
  3. Lower triangle: for k=1..n-1, i=k..n-1, j=n-1..k: mat[i][j] = d++
  4. พิมพ์เมทริกซ์ mat

โค้ดภาษา C

#include <stdio.h>

int printdiagonal(int n) {
    int mat[n][n], i, j, k, d = 1, m;
    
    // Upper triangle diagonals
    for (i = 0; i < n; i++) {
        j = i; k = 0;
        for (j = i; j >= 0; j--) {
            mat[k][j] = d;
            d++; k++;
        }
    }
    
    // Lower triangle diagonals
    for (k = 1; k < n; k++) {
        i = m = k;
        for (j = n - 1; j >= m; j--) {
            mat[i][j] = d;
            d++; i++;
        }
    }
    
    // Print matrix
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++)
            printf("%d ", mat[i][j]);
        printf("\n");
    }
    return 0;
}

int main() {
    int n = 3;
    printdiagonal(n);
    return 0;
}

ผลลัพธ์

1 2 4
3 5 7
6 8 9