Почему мой C++, максимизирующий попарный код продукта, не работает?

Итак, задача просила меня найти наибольшее произведение из заданной последовательности неотрицательных целых чисел. Что я сделал, так это попытался найти два самых больших целых числа из последовательности (для чего я использовал вектор, взяв на вход n чисел) и умножил их, поскольку нет отрицательных целых чисел. Я также использовал тип long long, так как одного типа int было бы недостаточно для огромных чисел. Я продолжал получать случайное огромное число в качестве вывода всякий раз, когда пытался запустить программу:

#include <iostream>
#include <vector>
using namespace std;

long long max_prod(const vector<int>& numbers) {
    int max1 = -1;
    int max2 = -1;
    int n = numbers.size();
    for (int i = 0; i<n; i++){
        if (numbers[i] > numbers[max1]) 
            max1 = i;
    }
    for (int j = 0; j < n; j++) {
        if (numbers[j] > numbers[max2] && j!=max1)
            max2 = j;
    }
return ((long long)(numbers[max1])) * ((long long)(numbers[max2]));
}

int main(){
    int n;
    cin >> n;
    vector<int> numbers(n);
    for (int i = 0; i<n; i++){
        cin >> numbers[i];
    }
    long long result = max_prod(numbers);
    cout << result << "\n";
    return 0;
}

последняя строка - это вывод, заданный программой

if (numbers[i] > numbers[max1]) : вы установили max на -1, поэтому numbers[max1] — произвольный мусор.
Victor Eijkhout 09.04.2022 23:36

Ой. Я думал, что max[-1] даст последний элемент вектора, потому что я думаю, что так оно и есть в python. Спасибо, посмотрю, работает ли.

Rbach24 09.04.2022 23:37

Использование -1 в этом коде опасно по нескольким причинам. Любой вектор размером меньше 2 будет использовать индекс -1 в окончательном ответе.

Drew Dormann 09.04.2022 23:38

Большое спасибо! Мой код работает теперь, когда я изменил их на 0.

Rbach24 09.04.2022 23:41
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
4
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть неопределенное поведение прямо здесь

long long max_prod(const vector<int>& numbers) {
    int max1 = -1; <<<<<====
    int max2 = -1;
    int n = numbers.size();
    for (int i = 0; i < n; i++) {
        if (numbers[i] > numbers[max1]) <<<<<==
            max1 = i;
    }
    for (int j = 0; j < n; j++) {
        if (numbers[j] > numbers[max2] && j != max1)
            max2 = j;
    }
    return ((long long)(numbers[max1])) * ((long long)(numbers[max2]));
}

Вы пытаетесь получить доступ к numbers[-1] (дважды в цикле j и один раз в цикле i).

Установите maxi и maxj на 0

Большое спасибо! Мой код работает теперь, когда я изменил их на 0.

Rbach24 09.04.2022 23:41

Другие вопросы по теме