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

จำนวนสี่เหลี่ยม 2x2 สูงสุดในสามเหลี่ยมมุมฉากเท่ากับขาใน C


โจทย์

สามเหลี่ยมมุมฉากเท่ากับขา (Right Isosceles Triangle) ฐาน = สูง = B หาจำนวนสี่เหลี่ยมจัตุรัสขนาด **2×2** ที่ใส่ได้มากที่สุด

การวิเคราะห์เรขาคณิต

วางสี่เหลี่ยม 2×2 เรียงแถวจากฐานขึ้นไป:

  • แถวที่ 1 (ฐาน): วางได้ (B - 2) / 2 ชิ้น (ลบ 2 ออกเพราะมุมสามเหลี่ยม)
  • แถวที่ 2: ฐานเหลือ B - 2 วางได้ (B - 4) / 2 ชิ้น
  • แถวที่ 3: ฐานเหลือ B - 4 วางได้ (B - 6) / 2 ชิ้น
  • ... จนกว่า ฐาน ≤ 2

สูตรคณิตศาสตร์

ให้ n = (B - 2) / 2 (Integer Division)

จำนวนสี่เหลี่ยม = 1 + 2 + 3 + ... + n = n(n+1)/2

ตัวอย่าง: B = 12

n = (12-2)/2 = 5
Squares = 5×6/2 = 15

Row 1: base 12 → (12-2)/2 = 5 squares
Row 2: base 10 → (10-2)/2 = 4 squares
Row 3: base 8  → (8-2)/2  = 3 squares
Row 4: base 6  → (6-2)/2  = 2 squares
Row 5: base 4  → (4-2)/2  = 1 square
Total: 5+4+3+2+1 = 15

ตัวอย่าง: B = 5

n = (5-2)/2 = 1 (Integer Division)
Squares = 1×2/2 = 1

Row 1: base 5 → (5-2)/2 = 1 square
Row 2: base 3 → (3-2)/2 = 0 square (Stop)
Total: 1

โปรแกรม C


#include 
#include 

int maxSquares(int base) {
    // ลบ 2 ออกสำหรับมุมสองมุม
    base = base - 2;
    // แต่ละสี่เหลี่ยมกว้าง 2
    base = base / 2; // floor division
    // ผลรวม 1+2+...+base
    return base * (base + 1) / 2;
}

int main() {
    int base;
    printf("Enter base/height of triangle: ");
    scanf("%d", &base);
    
    if (base < 2) {
        printf("Base too small for 2x2 square\n");
        return 0;
    }
    
    int result = maxSquares(base);
    printf("Maximum 2x2 squares: %d\n", result);
    return 0;
}

ผลลัพธ์:


Enter base/height of triangle: 8
Maximum 2x2 squares: 6

Enter base/height of triangle: 12
Maximum 2x2 squares: 15

Enter base/height of triangle: 5
Maximum 2x2 squares: 1

Complexity

  • Time: O(1) - คำนวณสูตรโดยตรง
  • Space: O(1)

การขยาย: สี่เหลี่ยมขนาด S×S


int maxSquaresSize(int base, int S) {
    if (base < S) return 0;
    int n = (base - S) / S; // จำนวนสี่เหลี่ยมในแถวแรก
    return n * (n + 1) / 2;
}