Computer >> Máy Tính >  >> Lập trình >> C ++

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

Chúng tôi là một tam giác đều với độ dài cạnh. Mục đích là để đếm số lượng các hình chữ nhật khác nhau có thể có 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. Ngoài ra, tất cả các điểm cuối của hình chữ nhật đều chạm vào các chấm như được hiển thị.

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

Hãy cho chúng tôi hiểu với các ví dụ

Đầu vào - bên =3

Đầu ra - Đếm số hình chữ nhật phân biệt nội tiếp tam giác đều là - 1

Giải thích - Hình trên là hình chữ nhật.

Đầu vào - bên =10

Đầu ra - Đếm số hình chữ nhật phân biệt nội tiếp trong tam giác đều là - 200

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

Như từ hình trên, ta thấy rằng các cạnh ngang sẽ tồn tại giữa các chấm của các mức thay thế.

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

  • Nhập bên dưới dạng một biến số nguyên và chuyển nó vào hàm để xử lý thêm

  • Lấy các biến tạm thời làm số đếm, tạm thời và kiểm tra.

  • Kiểm tra NẾU các cạnh là lẻ sau đó bắt đầu vòng lặp FOR i sang các bên - 1 cho đến khi tôi lớn hơn 1

  • Bên trong vòng lặp, kiểm tra IF i &1, sau đó đặt nhiệt độ là (các bên - i) / 2 và đặt kiểm tra là (i * (i + 1)) / 2 và đặt số lượng là kiểm tra * tạm thời ELSE, đặt nhiệt độ là ((các bên - 1) - i) / 2 và cũng đặt séc là (i * (i + 1)) / 2 và đặt số đếm là séc * tạm thời

  • Ngược lại, nếu các cạnh là chẵn thì bắt đầu một vòng lặp FOR khác với i là các cạnh - 1 và i lớn hơn 1.

  • Bên trong vòng lặp, kiểm tra IF i &1 sau đó đặt nhiệt độ là ((bên - 1) - i) / 2 và đặt kiểm tra là (i * (i + 1)) / 2 và đặt số đếm là kiểm tra * tạm thời ELSE đặt nhiệt độ là (các mặt - i) / 2 và đặt kiểm tra là (i * (i + 1)) / 2 và đặt đếm là kiểm tra * tạm thời.

  • Số lần trả lại

  • In kết quả.

Ví dụ

#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<<"Count of distinct rectangles inscribed in an equilateral triangle are: "<<rec_inside_equi(sides);
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Count of distinct rectangles inscribed in an equilateral triangle are: 4