C++ nha (Ý tưởng là chính nhee)
Bài 2: Tổng dãy số
Cho biết 𝑡 là tổng của dãy số nguyên dương 𝑎, 𝑎 + 1, 𝑎 + 2, 𝑎 + 3, … , 𝑏.
Yêu cầu: Cho 𝑡 hãy tìm 𝑎 và 𝑏.
Dữ liệu vào: Từ tệp văn bản ARRT.INP ghi số nguyên 𝑡 (0 < 𝑡 ≤ 109
).
Kết quả: Ghi vào tệp văn bản ARRT.OUT hai số nguyên a và b cách nhau một dấu cách.
Ví dụ
ARRT.INP ARRT.OUT
35 2 8
Quảng cáo
2 câu trả lời 59
Để giải bài toán này, chúng ta có thể sử dụng một phương pháp tìm kiếm đơn giản như vét cạn. Dưới đây là ý tưởng cơ bản cho giải pháp:
1. Ta sẽ duyệt từng giá trị \( a \) từ 1 đến \( t \). Với mỗi giá trị \( a \), ta sẽ kiểm tra xem tổng dãy từ \( a \) đến \( b \) có bằng \( t \) hay không.
2. Để kiểm tra, ta tính tổng của dãy từ \( a \) đến \( b \) theo công thức \( S = \frac{(b-a+1) \times (a+b)}{2} \).
3. Nếu \( S = t \), ta sẽ lưu lại giá trị \( a \) và \( b \).
4. Cuối cùng, ta sẽ xuất kết quả \( a \) và \( b \) đã tìm được.
Dưới đây là một đoạn mã C++ thực hiện ý tưởng trên:
```cpp
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream inFile("ARRT.INP");
ofstream outFile("ARRT.OUT");
int t;
inFile >> t;
int a = 1, b = 1; // Khởi tạo a và b ban đầu
// Duyệt từng giá trị a và kiểm tra
for (int i = 1; i <= t; ++i) {
int S = 0;
for (int j = i; j <= t; ++j) {
S += j;
if (S == t) {
a = i;
b = j;
break;
}
}
if (S == t) break;
}
outFile << a << " " << b << endl;
inFile.close();
outFile.close();
return 0;
}
```
Lưu ý rằng đoạn mã này chưa kiểm tra điều kiện \(0 < t \leq 10^9\). Trong thực tế, bạn cần thêm kiểm tra này để đảm bảo mã của bạn hoạt động đúng cho mọi trường hợp.
Quảng cáo
Câu hỏi hot cùng chủ đề
-
Hỏi từ APP VIETJACK9 25520
-
1 20709