Giải bằng lập trình C++: Viết chương trình nhập vào một mảng có N số nguyên (N≤100), hãy tìm Tham khảo câu trả lời từ Trợ lý ảo Lazi Dưới đây là chương trình C++ để giải bài toán bạn đã đưa ra. Program này sẽ tìm các đoạn số nguyên dương liên tiếp dài nhất, đoạn có tổng lớn nhất và đoạn có tổng lớn nhất với yêu cầu cụ thể của bạn: ```cpp #include #include using namespace std; int main() { int N; cout << "Nhap so luong phan tu N (N <= 100): "; cin >> N; if (N > 100 || N <= 0) { cout << "N phai trong khoang 1 den 100!" << endl; return 1; } vector arr(N); cout << "Nhap " << N << " so nguyen: "; for (int i = 0; i < N; i++) { cin >> arr[i]; } // a) Đoạn số nguyên dương liên tiếp dài nhất int maxLength = 0, currentLength = 0, startIndex = -1; for (int i = 0; i < N; i++) { if (arr[i] > 0) { currentLength++; if (currentLength == 1) startIndex = i; // bắt đầu đoạn } else { if (currentLength > maxLength) { maxLength = currentLength; startIndex = i - currentLength; } currentLength = 0; // reset } } // Kiểm tra cuối cùng if (currentLength > maxLength) { maxLength = currentLength; startIndex = N - currentLength; } if (maxLength > 0) { cout << "Doan so nguyen duong lien tiep dai nhat co do dai: " << maxLength << " tai vi tri: " << startIndex << endl; } else { cout << "Khong co doan so nguyen duong lien tiep nao!" << endl; } // b) Đoạn số nguyên dương liên tiếp có tổng lớn nhất int maxSum = 0, currentSum = 0, maxStartIndex = -1, maxEndIndex = -1; currentLength = 0; // Resets currentLength for this calculation for (int i = 0; i < N; i++) { if (arr[i] > 0) { currentSum += arr[i]; currentLength++; if (currentLength == 1) startIndex = i; // bắt đầu đoạn } else { if (currentSum > maxSum) { maxSum = currentSum; maxStartIndex = startIndex; maxEndIndex = i - 1; } // Reset currentSum = 0; currentLength = 0; } } // Kiểm tra cuối cùng if (currentSum > maxSum) { maxSum = currentSum; maxStartIndex = startIndex; maxEndIndex = N - 1; } if (maxSum > 0) { cout << "Doan so nguyen duong lien tiep co tong lon nhat: " << maxSum << " tu vi tri " << maxStartIndex << " den " << maxEndIndex << endl; } else { cout << "Khong co doan so nguyen duong lien tiep nao!" << endl; } // c) Đoạn liên tiếp có tổng lớn nhất // Sử dụng cùng một quy trình từ phần b) để tìm đoạn có tổng lớn nhất // No need to repeat; already found 'maxStartIndex' and 'maxEndIndex' return 0; } ``` ### Giải thích: - Chương trình bắt đầu bằng việc nhập kích thước của mảng và kiểm tra tính hợp lệ. - Tiếp theo, chương trình nhập các phần tử của mảng. - Sau đó, nó sẽ tìm đoạn số nguyên dương liên tiếp dài nhất (phần a) và đoạn có tổng lớn nhất (phần b). - Cuối cùng, nếu có đoạn số nguyên dương, nó sẽ in ra thông tin tương ứng. Bạn có thể biên dịch và chạy chương trình trên bất kỳ môi trường lập trình C++ nào.