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ểupair<int,int>. - Nhận hai biến
firstvà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đếni<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
ratiocó 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