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

โปรแกรม C พิมพ์รูปสามเหลี่ยมสองรูปสมมาตร (Symmetric Double Triangle Pattern)

โจทย์

กำหนดจำนวนบรรทัด ให้พิมพ์รูปสามเหลี่ยมสองรูปที่สมมาตรกัน โดยสลับตัวอักษร X และ O

ตัวอย่าง (n=5)

      X           X
     O X         O X
    X O X       X O X
   X O X O X   X O X O X
      X O         X O
       X           X

โครงสร้างรูปแบบ

แบ่งเป็น 3 ส่วน:

  1. ส่วนบน: n-1 บรรทัด (n คี่) หรือ n-2 บรรทัด (n คู่)
  2. ส่วนกลาง: 1 บรรทัด (n คี่) หรือ 3 บรรทัด (n คู่)
  3. ส่วนล่าง: n-1 บรรทัด (n คี่) หรือ n-2 บรรทัด (n คู่)

อัลกอริทึม

ใช้ฟังก์ชันช่วย printx(n) พิมพ์ X,O สลับเริ่ม X และ printo(n) เริ่ม O แล้วคำนวณ space และจำนวนตัวอักษรแต่ละบรรทัดตาม parity ของ n

โค้ดภาษา C

#include <stdio.h>

int printx(int n) {  // เริ่ม X
    for (int i = 1; i <= n; i++)
        printf(i % 2 != 0 ? "x " : "o ");
    return 0;
}

int printo(int n) {  // เริ่ม O
    for (int i = 1; i <= n; i++)
        printf(i % 2 != 0 ? "o " : "x ");
    return 0;
}

int printpattern(int n) {
    int x = n, i, j;
    if (n % 2 == 0) x = x - 1;
    int p = n - 1;  // space
    int s = 1;      // char count
    
    // ส่วนบน
    for (i = 1; i <= (x - 1) / 2; i++) {
        for (j = 1; j <= p; j++) printf(" ");
        if (i % 2 != 0) printx(s); else printo(s);
        printf("\n"); p++;
        for (j = 1; j <= p; j++) printf(" ");
        if (i % 2 != 0) printx(s); else printo(s);
        printf("\n"); p--; s++;
    }
    
    // ส่วนกลาง
    if (n % 2 == 0) {
        for (i = 1; i <= p; i++) printf(" ");
        if (n % 4 != 0) printx(n/2); else printo(n/2);
        printf("\n");
    }
    if (n % 2 != 0) printx(n);
    else {
        if (n % 4 != 0) { printx(n/2); printx(n/2); }
        else { printx(n/2); printo(n/2); }
    }
    printf("\n");
    
    // ส่วนล่าง
    if (n % 2 == 0) { printf(" "); printx(n/2); printf("\n"); }
    p = 1;
    if (n % 2 == 0) { x--; p = 2; }
    int q = x / 2;
    for (i = 1; i <= x; i++) {
        for (j = 1; j <= p; j++) printf(" ");
        printx(q);
        if (i % 2 == 0) q--;
        printf("\n"); p++;
    }
    printf("\n");
    return 1;
}

int main() {
    int n = 5;
    printpattern(n);
    return 0;
}

ผลลัพธ์

    X     X
   O X   O X
  X O X X O X
 X O X O X X O X O X
  X O X O X X O X O X
   X O     X O
    X       X