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

Đếm số hình chữ nhật có tỷ lệ cạnh nằm trong khoảng [a,b] trong C++


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

Ví dụ

Đầu vào

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

Đầu ra

Số hình chữ nhật có tỷ lệ cạnh trong khoảng [a,b] là: 4

Giải thích

Các cạnh có tỷ lệ trong khoảng [1.0, 1.6] là: {200,210}, {300,190}, {180,200}, {300,200}

Đầu vào

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

Đầu ra

Số hình chữ nhật có tỷ lệ cạnh trong khoảng [a,b] là: 2

Giải thích

Các cạnh có tỷ lệ trong khoảng [3.0, 4.0] là: {30,10}, {900,300}

Phương pháp sử dụng

Trong phương pháp này, chúng ta sẽ lấy các cạnh dưới dạng mảng pair<int,int>. Đối với mỗi cặp, kiểm tra xem giá trị lớn hơn/giá trị nhỏ hơn có kết quả nằm trong khoảng [first, last] không. Nếu đúng thì tăng biến đếm các cặp như vậy.

  • Nhận mảng rec[] kiểu pair<int,int>.
  • Nhận hai biến first và last để xác định phạm vi.
  • Hàm ratio_sides(pair<int, int> rec[], int total, double first, double last) nhận các cạnh hình chữ nhật và trả về số lượng hình chữ nhật có tỷ lệ cạnh nằm trong khoảng [a,b].
  • Khởi tạo biến đếm ban đầu là 0.
  • Sử dụng vòng lặp for duyệt từ i=0 đến i<total.
  • Trích xuất giá trị lớn hơn trong cặp rec[i] như maxi = max(rec[i].first, rec[i].second).
  • Trích xuất giá trị nhỏ hơn trong cặp rec[i] như mini = min(rec[i].first, rec[i].second).
  • Tính ratio = maxi/mini.
  • Nếu ratio có giá trị trong khoảng [first, last], thì tăng biến đếm.
  • Cuối cùng của vòng lặp for trả về biến đếm làm kết quả.

Ví dụ mã

#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 ratio = maxi / mini;
        
        if (ratio >= first && ratio <= 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 << "Số hình chữ nhật có tỷ lệ cạnh trong khoảng [a,b] là: " << ratio_sides(rec, total, first, last);
    return 0;
}

Đầu ra

Nếu chạy mã trên, sẽ tạo ra đầu ra sau:

Số hình chữ nhật có tỷ lệ cạnh trong khoảng [a,b] là: 4