30/09/2018, 16:20

[Hỏi] 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("
The highest number of array is %d", max);
X viết 18:24 ngày 30/09/2018

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

nhatlonggunz viết 18:36 ngày 30/09/2018

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

Sáng Béo viết 18:27 ngày 30/09/2018

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.

nhatlonggunz viết 18:33 ngày 30/09/2018

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

Sáng Béo viết 18:29 ngày 30/09/2018

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

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

X viết 18:22 ngày 30/09/2018

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

nhatlonggunz viết 18:35 ngày 30/09/2018

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

Sáng Béo viết 18:32 ngày 30/09/2018

for(int x = 0; x <= n; x++){

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é.

nhatlonggunz viết 18:34 ngày 30/09/2018

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

nhatlonggunz viết 18:35 ngày 30/09/2018

Đã 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++;
        }
    }
Sáng Béo viết 18:36 ngày 30/09/2018

for(int x = 1; x <= n - 1; x++)

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

TTmagic viết 18:37 ngày 30/09/2018

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

Sáng Béo viết 18:32 ngày 30/09/2018

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

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

... viết 18:29 ngày 30/09/2018

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

Sáng Béo viết 18:25 ngày 30/09/2018

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

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

Đỗ Trung Quân viết 18:21 ngày 30/09/2018

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

Lập Trình Sư viết 18:24 ngày 30/09/2018

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; }
}
Sáng Béo viết 18:33 ngày 30/09/2018

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

à, 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.

nhatlonggunz viết 18:37 ngày 30/09/2018

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

Bài liên quan
0