Cần chỉ giúp phần sai của vòng while

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n, i1, j1, max = 0, dem, j;
    scanf("%d", & n);
    unsigned int a[n];
    for (int i = 0; i < n; i++)
        scanf("%d", & a[i]);
    for (int i = 1; i < n - 3; i++) {
        dem = 0;
        if (a[i] != a[i + 1]) {
            dem = 2;
            j = i + 1;
            i1 = i - 1;
            j1 = j + 1;
            while (a[i] == a[i1] && a[j] == a[j1]) {
                dem = dem + 2;
                if (i == 1 || j == n - 2)
                    break;
                i--;
                i1--;
                j++;
                j1++;
            }
        }
        if (dem > max)
            max = dem;
    }
    if (max < 2)
        max = 2;
    printf("%d", max);
    return 0;
}

em đã ngồi ngẩn người mấy tiếng rồi vẫn không nghĩ ra tại sao vòng while của em lại cứ chạy vô cực như vậy :(( mọi người chỉ điểm cho em với ạ, em không quen biết ai để hỏi đáp được vấn đề này cả
input là:

9
2 2 1 1 1 2 2 2 2
  • B1:Vòng lặp for đầu, i:=1, so sánh giá trị 2 với 1 => khác nhau => vô vòng while

  • B2: Vòng while lặp đến khi i:=1 => break. Thoát vòng while. Hoàn thành vòng for, tăng i:=2

  • B3 : Vòng for chạy đến khi i:=4 (tức số 1 cuối cùng trong dãy ‘1’), 1!=2 => Vào vòng while

  • B4: Vòng while duyệt đến khi i:=2 ; j:=7 (7 = n-2) => break. Hoàn thành vòng for, tăng i:=3

Và thế là công sức của thằng for đổ sông đổ bể nhờ thằng while :slight_smile:

Vì ở các vòng lặp sau i lại tăng lên 4 và quá trình bước 3, bước 4 lặp lại => Infinity loop

1 Like

Đúng như anh Vinh nói, khi vòng lặp for của em tới vị trí i=4 ( số 1 thứ 3 ) thì thỏa điều kiện if đồng thời thỏa luôn dk của while nhưng i!=1 và j!=n-2 lúc đó i-- ( trong while) tức là i=3 ko thỏa dk của while, sau đó i lại bị for tăng lên 1 là i=1 lúc đó nó lặp lại vô hạn

em cảm ơn a ạ, cuối cùng em cũng bít sai và đã sửa được chương trìnhcho nó chạy. cảm ơn các anh rất nhiều kkkk.

A post was split to a new topic: Codeblocks không debug được

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