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

Đếm số hình chữ nhật sao cho tỷ lệ các cạnh nằm trong phạm vi [a, b] trong C ++.

Cho các cạnh của hình chữ nhật trong các biến đầu tiên và cuối cùng. Mục tiêu là tìm số lượng hình chữ nhật có tỷ lệ chiều dài / chiều rộng cạnh của chúng nằm trong phạm vi [đầu tiên, cuối cùng].

Ví dụ

Đầu vào

rec[] = { { 200, 210 }, { 100, 50 }, { 300, 190}, {180, 200}, {300, 200}} and first = 1.0, last = 1.6

Đầu ra

Count of number of rectangles such that ratio of sides lies in the range [a,b] are: 4

Giải thích

The sides that have ratio in the range [ 1.0,1.6 ] are :
{200,210}, {300,190}, {180,200}, {300,200}

Đầu vào

rec[] = { { 10,20 }, { 30, 10 }, { 100, 500}, {900, 300}, {450, 90}} and
first = 3.0, last = 4.0

Đầu ra

Count of number of rectangles such that ratio of sides lies in the range [a,b]
are: 2

Giải thích

The sides that have ratio in the range [ 3.0,4.0 ] are :
{30,10}, {900,300}

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

Trong cách tiếp cận này, chúng ta sẽ nhận các cạnh dưới dạng một mảng của cặp . Đối với mỗi cặp, hãy kiểm tra xem giá trị lớn hơn / giá trị nhỏ hơn có kết quả nằm trong phạm vi [đầu tiên, cuối cùng] hay không. Nếu đúng thì số lượng gia tăng của các cặp như vậy.

  • Lấy một mảng rec [] kiểu cặp .

  • Lấy hai biến đầu tiên và cuối cùng để xác định phạm vi.

  • Hàm ratio_sides (cặp rec [], int total, double first, double last) nhận các cạnh của hình chữ nhật và trả về số lượng hình chữ nhật sao cho tỷ lệ các cạnh nằm trong phạm vi [a, b].

  • Lấy số lượng ban đầu là 0.

  • Sử dụng vòng lặp for đi qua từ i =0 đến i

  • Trích xuất giá trị lớn hơn trong cặp rec [i] dưới dạng maxi =max (rec [i] .first, rec [i] .second).

  • Trích xuất giá trị nhỏ hơn trong cặp rec [i] dưới dạng mini =min (rec [i] .first, rec [i] .second).

  • Tính toán trung bình =maxi / mini.

  • Nếu giá trị trung bình có giá trị trong phạm vi [đầu tiên, cuối cùng], thì số gia tăng.

  • Ở cuối vòng lặp for, kết quả trả về là ..

Ví dụ

#include <bits/stdc++.h>
using namespace std;
int ratio_sides(pair<int, int> rec[], int total, double first, double last){
   int count = 0;
   for (int i = 0; i < total; i++){
      double maxi = max(rec[i].first, rec[i].second);
      double mini = min(rec[i].first, rec[i].second);
      double average = maxi/mini;
      if (average >= first){
         if(average <= last){
            count++;
         }
      }
   }
   return count;
}
int main(){
   pair<int, int> rec[] = { { 200, 210 }, { 100, 50 }, { 300, 190}, {180, 200}, {300, 200}};
   int total = 5;
   double first = 1.0, last = 1.6;
   cout<<"Count of number of rectangles such that ratio of sides lies in the range [a,b] are: "<<ratio_sides(rec, total, first, last);
   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 number of rectangles such that ratio of sides lies in the range [a,b] are: 4