Xuất ra mảng con giảm dần

Thấy trên FB có một bạn hỏi câu này
Viết thuật toán xuất ra các mảng con giảm dần

Ví Dụ:

Input:

3 2 1 5 4

Output :

3 2 1 
5 4
1 Like

Sáng sớm rảnh rỗi sinh nông nổi làm luôn.

#include <stdio.h>

int main()
{
    int mang[] = {3, 4, 2, 1, 5, 4};
    int max = mang[0];
    int print_max = 1;
    int i;
    for(i = 1; i < sizeof mang / sizeof(int); ++i) {
        if (max > mang[i]) {
            if (print_max) {
                printf("\n%d ", max);
                print_max = 0;
            }
            printf("%d ", mang[i]);
        }
        else {
            max = mang[i];
            print_max = 1;
        }
    }
        
    return 0;
}

Ai có cách nào khác không?

1 Like

Theo mình bài này chỉ cần lưu chỉ sổ của mảng bị chia ra:
Chỉ số phải thoã mãn điều kiện: a[i]>a[i+1]
lưu chỉ số này vào mảng index.
sau đó in ra các đoạn index[i]->index[i+1] là được

2 Likes

anh đạt ơi, tại sao sizeof lại là một toán tử chứ không phải là một hàm. Và anh có thể chỉ em cách phân biệt không?

Nếu có 5 4 đc coi là dãy giảm thì sau khi tìm được 3 2 1 cũng phải in thêm 2 1 chứ a đạt X__X

1 Like

Không phải em, vì 321 là một dãy con giảm dần rồi, cho tới khi gặp số 5 thì có nghĩa là 321 đã bị ngắt quãng. Sau đó 5 phải tìm tiếp xem phía sau nó có dãy con nào không.

1 Like

sizeof nó sẽ trả ra một constant, mục đích là để optimze chương trình cho chính compiler đó tạo ra
ví dụ sizeof (int) thì compiler nó hiểu là 4, ko cần phải runtime mới biết là 4

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?