Hướng dẫn giải của IF16: Cấp số nhân
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng dẫn giải
Cho ba số p, q, r khác 0. Cần kiểm tra ba số có thể sắp xếp theo một thứ tự nào đó để thành cấp số nhân hay không. In Yes nếu được, No nếu không.
Cách làm
- Đọc ba số p, q, r.
- Ba số lập thành cấp số nhân khi bình phương của một số bằng tích hai số còn lại. Ví dụ 1, 3, 9 có 3 mũ 2 bằng 1 nhân 9.
- Vì đề không yêu cầu đúng thứ tự, cần kiểm tra cả ba khả năng: qq bằng pr, pp bằng qr, hoặc rr bằng pq.
- Nếu một trong ba điều kiện đúng thì in Yes, ngược lại in No. Bẫy: tích có thể lớn tới khoảng 10^12, nên dùng long long.
#include <bits/stdc++.h>
using namespace std;
int main() {
long long p, q, r;
cin >> p >> q >> r;
// Ba số có thể xếp theo thứ tự bất kỳ để thành cấp số nhân
// Nếu bình phương một số bằng tích của hai số kia thì ba số tạo được cấp số nhân
// Nhớ dùng long long vì tích có thể lớn
if (q * q == p * r || p * p == q * r || r * r == p * q) {
cout << "Yes\n";
} else {
cout << "No\n";
}
return 0;
}
Bình luận