Xuất ra giá trị rác khi tìm phần tử lớn nhất trong mảng

Em đang làm bài tìm phần tử lớn nhất trong mảng và số lần lặp lại của phần tử đó. Mọi thứ gần như tốt nhưng khi em tìm phần tử lớn nhất, nó xuất ra một giá trị rất lớn (em xin tạm gọi nó là giá trị rác). Sau khi debug, em thấy vòng for chạy bình thường cho tới khi kết thúc vòng lặp thì max bỗng nhiên nhảy sang giá trị rác. Mọi người giúp em với

 // Input Array
    InputArray(A, n);

    // Output Array
    OutputArray(A, n);

    // The maximum number of array
    for(int x = 0; x <= n; x++){
        if(A[x] > max){
            max = A[x];
        }
    }

printf("\nThe highest number of array is %d", max);

gán max = a[0] trước

3 Likes

Cho em hỏi là tại sao ạ, em gán max = 0 rồi xét lần lượt từ A[0] không được hả anh

max = 0 rồi so sánh lần lượt A[0] -> A[n-1] với A[max] cũng đc. khi đó max là chỉ số của phần tử max
còn nếu max = 0 mà so sánh A[0]-> A[n-1] với max thì max là giá trị lớn nhất. đặt như này này không ổn, nếu phần tử âm hết thì sao? nên nếu muốn max lưu giá trị lớn nhất của mảng thì chỉ đặt max = 1 phần tử bất kì trong mảng ( có thể là A[0] -> A[n-1]) rồi cho chạy từ đầu đến hết mảng rồi so sánh. nhưng nên đặt là A[0] cho dễ nhìn. :smile:

2 Likes

Vậy phải sửa sao đây anh

mình mới sửa lại cmt, bạn xem lại nha

thêm max = a[0]; trước for thôi :v

dạ em thử rồi, vẫn bị như trên

sai đây nữa nè bạn.
1 mảng có n phần tử thì chỉ số của nó chỉ chạy từ 0->n-1 thôi nhé.

2 Likes

A, cám ơn anh, làm cái trên đúng mà xuống dưới lại quên

1 Like

Đã sửa, cám ơn mọi người

// Input Array
    InputArray(A, n);

    // Output Array
    OutputArray(A, n);

    // The maximum number of array
    int max = A[0];
    for(int x = 1; x <= n - 1; x++){
        if(A[x] > max){
            max = A[x];
        }
    }

    // The time(s) that the biggest number in array repeats
    for(int y = 0; y <= n - 1; y++){
        if(A[y] == max){
            times++;
        }
    }
1 Like

chỗ này ấy, e có thể gõ là x<n. thế nhanh hơn 1 xíu. :smile:
2 cái tương đương nhau. vì x là số nguyên mà. :smile:

1 Like

mới lớp 9 đã code bằng tiếng anh r, pro ghê :v

2 Likes

e đến lớp 11 mới đc biết đến cái lập trình đầu tiên Pascal.
trường quê không có mấy môn đó. T.T

2 Likes

mình vào năm 1 mới biết lập trình C có ăn được hay không, tiếc là ko ăn được :open_mouth:

1 Like

năm 2 mình mới đc học C. đang năm 2. :smiley:

2 Likes

Học sinh năm 5 vẫn học C nè. hehe

1 Like

tớ code nháp thử thế này có được không?

// Input Array
InputArray(A, n);

// Output Array
OutputArray(A, n);

// Init max
int max   = A[0];
int times = 0;

foreach(int item in A) {
// The maximum number of array
    if(item > max) { max = item; times = 0; }
    // The time(s) that the biggest number in array repeats
    else if(item == max) { ++times; }
}
2 Likes

à, chuẩn rồi, trước e cũng cod thế này. cũng 1 cái đếm luôn, đỡ phải lặp thêm lần nữa. :smile:

Khi nào dùng ++time, khi nào dùng time++ đây anh.

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