Một dãy các số nguyên A[1..N] là dãy số có N phần tử trong đó giá trị của các phần tử là các số nguyên. Yêu cầu: Cho 1 dãy gồm N số nguyên. Hãy tìm số lượng các phần tử liên tiếp dài nhất trong dãy số nguyên có

Một dãy các số nguyên A[1..N] là dãy số có N phần tử trong đó giá trị của các phần tử là các số nguyên. Yêu cầu: Cho 1 dãy gồm N số nguyên. Hãy tìm số lượng các phần tử liên tiếp dài nhất trong dãy số nguyên có giá trị dương. Dữ liệu: Ghi ra tệp LIENTUC.INP gồm: - Dòng đầu tiên chứa số nguyên N (2 <= N <= 5000); - Dòng thứ hai chứa giá trị các phần tử A[i] của dãy (-109<= A[i] <= 109). Kết quả: Xuất ra tệp LIENTUC.OUT độ dài lớn nhất của dãy số tìm được. Nếu không có kết quả thì in ra 0. Ví dụ: LIENTUC.INP LIENTUC.OUT 10 2 10 -2 3 5 1 -1 1 1 1 3 4 6 8 10 Giải thích: Dãy liên tục dài nhất tìm được là A[4..6] = {3, 5, 1}. Vậy số lượng phần tử có giá trị dương dài nhất là 3. lam trong c++
Câu trả lời này dùng AI, hãy kiểm tra lại trước khi sử dụng
```cpp
#include
#include
#include

using namespace std;

int main() {
ifstream inp("LIENTUC.INP");
ofstream out("LIENTUC.OUT");

int N;
inp >> N;

vector A(N);
for (int i = 0; i < N; ++i) {
inp >> A[i];
}

int max_length = 0;
int current_length = 0;

for (int i = 0; i < N; ++i) {
if (A[i] > 0) {
current_length++;
} else {
// Khi gặp số không dương, kiểm tra và cập nhật max_length
if (current_length > max_length) {
max_length = current_length;
}
current_length = 0;
}
}

// Kiểm tra lần cuối cùng nếu dãy kết thúc bằng các số dương
if (current_length > max_length) {
max_length = current_length;
}

out << max_length << endl;

inp.close();
out.close();

return 0;
}
```

Giải thích chi tiết:

1. Đọc dữ liệu từ file `LIENTUC.INP`:
- Mở file `LIENTUC.INP` để đọc dữ liệu vào.
- Đọc số nguyên `N` từ dòng đầu tiên, đây là số lượng phần tử trong dãy số.
- Đọc các phần tử của dãy số vào vector `A`.

2. Tìm dãy liên tục dài nhất có giá trị dương:
- Khởi tạo hai biến `max_length` để lưu độ dài dãy liên tục dài nhất tìm được và `current_length` để đếm độ dài của dãy hiện tại.
- Duyệt qua từng phần tử của dãy `A`:
- Nếu phần tử hiện tại lớn hơn 0, tăng `current_length`.
- Nếu phần tử hiện tại không lớn hơn 0:
- So sánh `current_length` với `max_length`. Nếu `current_length` lớn hơn, cập nhật `max_length`.
- Đặt lại `current_length` về 0 để bắt đầu đếm lại từ đầu.

3. Xử lý trường hợp dãy kết thúc bằng các số dương:
- Sau khi duyệt xong, nếu `current_length` lớn hơn `max_length`, cập nhật `max_length` một lần nữa. Điều này đảm bảo rằng nếu dãy kết thúc bằng các số dương, chúng vẫn được tính vào.

4. Xuất kết quả ra file `LIENTUC.OUT`:
- Ghi giá trị `max_length` ra file `LIENTUC.OUT`. Nếu không có dãy số dương liên tục nào, giá trị này sẽ là 0.

5. Đóng file:
- Đóng file đầu vào và đầu ra sau khi hoàn thành việc đọc và ghi dữ liệu.

Chương trình này tuân thủ yêu cầu của bài toán, tìm độ dài của dãy số dương liên tiếp dài nhất trong một dãy số nguyên.
Đăng phản hồi