Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm số hình chữ nhật riêng biệt nội tiếp trong tam giác đều bằng C++

Cho một tam giác đều với độ dài cạnh. Mục tiêu là đếm số lượng hình chữ nhật riêng biệt có thể nằm bên trong tam giác sao cho các cạnh ngang của hình chữ nhật song song với đáy. Cũng có tất cả các đỉnh của hình chữ nhật chạm vào các chấm như hình minh họa.

Đếm số hình chữ nhật riêng biệt nội tiếp trong tam giác đều bằng C++

Ví dụ

Đầu vào - sides=3

Đầu ra - Số hình chữ nhật riêng biệt nội tiếp trong tam giác đều là 1

Giải thích - Hình vẽ trên cho thấy hình chữ nhật đó.

Đầu vào - sides=10

Đầu ra - Số hình chữ nhật riêng biệt nội tiếp trong tam giác đều là 200

Phương pháp sử dụng trong chương trình

Như từ hình trên thấy, các cạnh ngang sẽ tồn tại giữa các chấm của các cấp độ xen kẽ.

Số chấm có thể đếm từ cấp độ 0-1, cấp độ 1-2 ... cấp độ n-n+1.

  • Nhập cạnh là biến nguyên và truyền vào hàm xử lý
  • Biến tạm: count, temp, check
  • KIỂM TRA nếu cạnh lẻ: vòng lặp FOR i từ sides - 1 đến i > 1
  • Trong vòng lặp, KIỂM TRA nếu i & 1 thì gán temp = (sides - i)/2, check = (i * (i + 1))/2, count += check * temp. NGƯỢC LẠI: temp = ((sides - 1) - i)/2, check = (i * (i + 1))/2, count += check * temp
  • NGƯỢC LẠI, nếu cạnh chẵn: vòng lặp FOR i từ sides - 1 đến i > 1
  • Trong vòng lặp, KIỂM TRA nếu i & 1 thì temp = ((sides - 1) - i) / 2, check = (i * (i + 1)) / 2, count += check * temp. NGƯỢC LẠI: temp = (sides - i) / 2, check = (i * (i + 1)) / 2, count += check * temp
  • Trả về count
  • In kết quả

Chương trình minh họa

#include <iostream>
using namespace std;

int rec_inside_equi(int sides) {
    int count = 0, temp, check;
    if (sides % 2 != 0) {
        for (int i = sides - 2; i >= 1; i--) {
            if (i & 1) {
                temp = (sides - i) / 2;
                check = (i * (i + 1)) / 2;
                count += check * temp;
            } else {
                temp = ((sides - 1) - i) / 2;
                check = (i * (i + 1)) / 2;
                count += check * temp;
            }
        }
    } else {
        for (int i = sides - 2; i >= 1; i--) {
            if (i & 1) {
                temp = ((sides - 1) - i) / 2;
                check = (i * (i + 1)) / 2;
                count += check * temp;
            } else {
                temp = (sides - i) / 2;
                check = (i * (i + 1)) / 2;
                count += check * temp;
            }
        }
    }
    return count;
}

int main() {
    int sides = 4;
    cout << "Số hình chữ nhật riêng biệt nội tiếp trong tam giác đều là: " << rec_inside_equi(sides);
    return 0;
}

Đầu ra

Số hình chữ nhật riêng biệt nội tiếp trong tam giác đều là: 4