Code đếm tối đa bao nhiêu số liên tiếp trong mảng bị sai

Chào mọi người!
Em có đoạn code này để đếm tối đa bao nhiêu số liên tiếp trong mảng
Nhưng khi nhập mảng: 0 108 0 234 235 0 666 0 0 0 0 106 107 0 thì xuất ra giá trị là 4
mình cần giá trị là 3: 106 107 108 thì sửa như thế nào ạ!. thank!!!
code  đếm

Bạn trình bày được phương pháp giải k. Nếu được thì tui chỉ code cho.

2 Likes

Mình có ý tưởng là: nhóm các dãy số liên tiếp lại thành 1 nhóm, sau đó đếm và lấy giá trị lớn nhất. Không biết như thế nào

Đừng suy nghĩ phức tạp quá, đầu tiên thử sắp xếp lại dãy số trên xem :penguin:
Ban đầu:
0 108 0 234 235 0 666 0 0 0 0 106 107 0
Sau khi sắp xếp:
0 0 0 0 0 0 0 0 106 107 108 234 235 666

Thử kiểm tra xem có gì đặc biệt :wink:

4 Likes

cách này mình đã thử rồi, nó sẽ bị sai 1 số trường hợp

Nhóm các dãy số liên tiếp lại một nhóm? Ý bạn là tìm từng “dãy số liên tiếp” rồi lưu vào một chổ (array) đúng không.
Sau đó đếm và lấy giá trị lớn nhất? Ý bạn là lấy dãy số liên tiếp dài nhất?
Theo tui thì đây là bước hoàn toàn dư thừa.
Tui nghĩ bạn cần:

  • Sắp xếp lại mảng.
  • Tìm ra dãy số liên tiếp (số trước nhỏ hơn số sau một đơn vị). Ví dụ có mảng đã sắp xếp như sau: 1 3 3 4 4 5 ta được dãy liên tiếp 3 4 5 (xét nếu lặp lại thì bỏ qua ví dụ 3 3 4 4).
  • Cùng lúc đấy đếm độ dài của dãy số.

Sau khi đến điểm cuối của dãy số hãy:

  • Cập nhập độ dài lớn nhất MAX (xem độ dài dãy số này có lớn hơn dãy số tìm ra trước đó hay ko).
  • Reset lại biến đếm và lặp lại cho đến hết.
5 Likes

Ồ. Bạn có thể ví dụ 1 trường hợp sai được không?

4 Likes

Nếu bạn vẫn chưa nghĩ ra phải code như thế nào, thì có thể tham khảo:

#include <stdio.h>

int findMax(int number, int array[]) {
    int max   = 0;
    int count = 1;
    int current = array[0];
    for(int i = 1; i < number; i++) {
        int next = array[i];
        if(current + 1 == next) {
            count++;
            current = next;
        } else if(current != next) {
            if(count > max && count != 1) max = count;
            current = next;
            count = 1;
        }
        if(i == number - 1) {
            if(count > max && count != 1) max = count;
        }
    }
    return max;
}

void sort(int number, int array[]) {
    for(int i = 0; i < number ; i++) {
        for(int j = i + 1 ; j < number ; j++) {
            if(array[i] > array[j]) {
                array[i] = array[i] + array[j];
                array[j] = array[i] - array[j];
                array[i] = array[i] - array[j];
            }
        }
    }
}

int main(){
    int number;
    printf("Number of elements: ");
    scanf("%d", &number);
    
    int array[1000];
    printf("Elements:\n");
    for(int i = 0 ; i < number ; i++) {
        printf("(%d): ", i+1);
        scanf("%d", &array[i]);
    }

    sort(number, array);
    int max = findMax(number, array);
    printf("Max = %d\n", max);
}
3 Likes

Mình thấy cách này đúng với mọi trường hợp mà. Nếu trong mảng có 2 phần tử bằng nhau thì không tăng biến dem lên thôi.

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