Задать вопрос

Где в решении задачи ошибка?

Здравствуйте! Решаю на C++ задачу:
В массиве, заполненном произвольными целыми числами, найдите два числа, произведение которых максимально. Вложенные циклы не используйте.

Входные данные
На вход программе сначала подается значение n≤50000 — количество элементов в массиве. В следующей строке входных данных расположены сами элементы массива — целые числа, по модулю не превосходящие 30000.
Выходные данные
Выдайте два искомых числа в порядке неубывания.

По-моему, всё решено верно, но результат: "Программа выдаёт неверный ответ"
В чем ошибка?
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int a = 0, num1max = 0, num2max = 0, num1min = 0, num2min = 0;
    cin >> a;
    vector <int> v(a);
    for(int i = 0; i < a; i++) {
        cin >> v[i];
    }
    for(int i = 0; i < a; i++) {
        if(v[i] > num1max) {
            num2max = num1max;
            num1max = v[i];
        } else if(v[i] > num2max) {
            num2max = v[i];
        }
        if(v[i] < num1min) {
            num2min = num1min;
            num1min = v[i];
        } else if (v[i] < num2min) {
            num2min = v[i];
        }
    }
    if(num1max * num2max > num1min * num2min) {
        if(num1max > num2max) swap(num1max, num2max);
        cout << num1max << " " << num2max;
    } else {
        if(num1min > num2min) swap(num1min, num2min);
        cout << num1min << " " << num2min;
    }
}
  • Вопрос задан
  • 1114 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Инициализируйте не нулями, а двумя первыми числами и min1|2 и max1|2. Не забудьте их в нужном порядке сделать (num1max>=num2max). И цикл с 2 гоните, а не от нуля при этом.

Например на тесте {1, 0} у вас программа может вывести 2 нуля.

Потому что num1min и num2min останутся нулями а оба произведения по нулям.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Попробуйте подать на вход набор (-1, 1).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы