01/10/2018, 11:10

Giúp mình bài ở codefights với

Chương trình mình như hình không biết lỗi chỗ nào mong mọi người chỉ giúp.

Mình dịch tạm đề là tìm tích 2 phần tử liên tiếp lớn nhất trong mảng.

Trần Hoàn viết 13:14 ngày 01/10/2018

C#

int adjacentElementsProduct(int[] inputArray)
{
    var Output = inputArray[0] * inputArray[1];
    for (var i = 0; i < inputArray.Length - 1; i += 1)
        if (inputArray[i] * inputArray[i + 1] > Output)
            Output = inputArray[i] * inputArray[i + 1];
    return Output;
}

Nguyen Kien viết 13:24 ngày 01/10/2018

Cho em hỏi sao mình không ++i chạy cho nhanh với i sao không khởi gán bằng 1 đỡ phải so sánh với output đầu ạ ?

Black viết 13:24 ngày 01/10/2018

Cách làm của b mình hiểu nhưng tại sao bài mình lại sai vậy nhìn mãi không biết lỗi ở đâu.

rogp10 viết 13:17 ngày 01/10/2018

Cho em hỏi sao mình không ++i chạy cho nhanh

Bạn này không khoái i++ lắm =)) thực ra nên dùng ++i.

Trần Hoàn viết 13:26 ngày 01/10/2018

sao không khởi gán bằng 1 đỡ phải so sánh với output đầu ạ ?

Vì đề bài cho là 2 ≤ inputArray.Length ≤ 10, nếu quẩy luôn int i = 1 thì có thể có trường hợp lỗi.

Cách làm của b mình hiểu nhưng tại sao bài mình lại sai vậy nhìn mãi không biết lỗi ở đâu.

Mình không học C tử tế nên mình không biết cách dùng toán tử sizeof.
Nhưng nếu bạn muốn lấy về kích thước của vector, bạn chỉ cần inputArray.size() là được mà
Truy cập đến phần tử thì cũng chỉ cần inputArray[i] như mình thôi.

Nguyên Trọng viết 13:21 ngày 01/10/2018

Chào bạn, mình xin phép phân tích theo ý mình các dòng code của bạn trong **:

for(int i=0;i<size-1;i++){     //Ở vòng lặp cuối, i == size -1
     *(p+1)=  inputArray[i]*inputArray[i+1]   // *(p+size-1) == inputArray[size-1]* inputArray[size]
}

Nói rõ hơn, xuất hiện inputArray[size] là giá trị lạ và rất có thể inputArray[size] == 0.

Mình thấy Output sai của bạn có nguyên nhân từ dãy xen kẽ - +.

Mình nhận thấy lỗi của bạn ở đây là cho rằng sizeof§/sizeof(int) == sizeof(inputArray)/sizeof(int), trong khi: sizeof§/sizeof(int) == sizeof(inputArray)/sizeof(int) -1

Dark.Hades viết 13:11 ngày 01/10/2018

Đề bài cho mảng vector rồi bạn dùng luôn vector đi, khuyến khích bỏ luôn cấp phát động khi không cần thiết như trường hợp này.

sizeof() is giving you the in-memory size of the object/type it is applied to, in multiples of sizeof(char) (usually one byte). If you want to know the in-memory size of the container and its elements, you could do this:

sizeof(v) + sizeof(T) * v.capacity(); // where T is the element type

Khanhvm viết 13:20 ngày 01/10/2018

Hôm ngay mới nghịch đến codefight. Đóng góp được ý kiến nhỏ là i có thể start từ 1;

rogp10 viết 13:17 ngày 01/10/2018

i = 1 cũng đúng, nhưng để i = 0 thì [i] * [i+1] nó nhìn đầy đặn hơn là [i] * [i-1]

Mình nhận thấy lỗi của bạn ở đây là cho rằng sizeof§/sizeof(int) == sizeof(inputArray)/sizeof(int), trong khi: sizeof§/sizeof(int) == sizeof(inputArray)/sizeof(int) -1

Chỗ này chấm size ngay và luôn. i < inputArray.size() - 1

Bài liên quan
0