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 205
Để 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
Bạn muốn hỏi bài tập?
Câu hỏi hot cùng chủ đề
-
Đã trả lời bởi chuyên gia
38560 -
Hỏi từ APP VIETJACK27744
