Liệt kê các dãy con liên tiếp không giảm

244
Lập trình C++

Bài toán. Liệt kê các dãy con liên tiếp không giảm (có nhiều hơn 1 phần tử) của dãy ban đầu, mỗi dãy trên 1 dòng. Ví dụ:

SEARCH.INP

SEARCH.OUT

6

3 4 6 2 7 3

3 4 6

2 7

Code tham khảo:

#include <iostream>
using namespace std;

int main () {
    freopen("KGIAM.INP","r",stdin);
    freopen("KGIAM.OUT","w",stdout);
    int n, a[1000];
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    int i = 0; // Biến chạy i
    int d = 0; // Biến xác định vị trí của a[i]
    while (i < n-1) {
        // Nếu thỏa mãn điều kiện ko giảm
        if (a[i] < a[i+1]) {
            // Nếu a[i] là giá trị đầu tiên của dãy số
            if (d==0) {
                cout << a[i] << " " << a[i+1] << " ";
                d++;
            }
            // Trường hợp d != 0: a[i+1] là giá trị tiếp theo
            else
                cout << a[i+1] << " ";
        }
        // Ko thỏa mãn: xuống dòng viết dãy số tiếp theo
        else {
            cout << endl;
            d = 0;
        }
        i++; // Tăng biến i qua mỗi vòng lặp
    }
    return 0;
}