СРОЧНО
С++
Минимальное произведение
Дана последовательность из N
целых чисел (они могут быть положительными, отрицательными или равными 0
). Необходимо выбрать из этих чисел два числа так, чтобы их произведение было как можно меньшим (не рассматриваются квадраты данных чисел, но можно выбрать произведение двух различных элементов последовательности, равных друг другу).
Формат входных данных
В первой строке входных данных записано целое число N
, (2⩽N⩽105)— количество данных чисел. Следующие N строк содержат сами числа, не превосходящие по модулю 40000
.
Формат выходных данных
Программа должна вывести единственное целое число — наименьшее возможное произведение двух различных элементов этой последовательности.
Система оценки
Тесты к этой задаче разбиты на четыре группы, приведённые в таблице. Но оценивается каждый тест в отдельности.
Количество баллов Ограничение на N
Ограничение на значение членов последовательности
20 2⩽N⩽100
Неотрицательные
20 2⩽N⩽100
Положительные, отрицательные или ноль
20 100 Неотрицательные
40 100 Положительные, отрицательные или ноль
Ввод
Вывод
3
1
-3
2
-6
Answers & Comments
Программа:
C++:
#include <iostream>
using namespace std;
int main() {
int N, i, num, min = 40001, max = -40001, minSecond = 40001, maxSecond = -40001, minimum;
cout << "N = "; cin >> N;
for (i = 0; i < N; i++) {
cin >> num;
if (num < min) {
minSecond = min;
min = num;
} else if (num < minSecond) {
minSecond = num;
}
if (num > max) {
maxSecond = max;
max = num;
} else if (num > maxSecond) {
maxSecond = num;
}
}
if (min * max < min * minSecond) minimum = min * max;
else minimum = min * minSecond;
if (max * maxSecond < minimum) minimum = max * maxSecond;
cout << minimum;
}
Объяснение:
В начале регистрируются переменные: N - кол-во чисел, которое будет введено; i - для цикла for; num - для чисел, которые будут вводится с клавиатуры; min и minSecond - два минимальных числа, которые будут введены; max и maxSecond - два максимальных числа, которые будут введены; minimum - минимальное произведение.
После "регистрации" переменных вводится число N. Далее с помощью цикла выполняется тело N раз. Вводится само число и далее анализируется по такой логике:
Можно получить положительное и отрицательное минимальное число по модулю. Например, если было введено отрицательное число, то его требуется перемножить с максимальным положительным, чтобы в результате получить минимальное число. Также по такой логике требуется рассматривать произведение минимального и второго по величине минимального числа, также произведение максимального и максимального на втором месте, потому что ввод может быть максимально неудобным (логически рассматриваются все допустимые варианты определения минимального произведения).
Итак, в самом цикле с помощью условного оператора if находим минимальное число и второе минимальное число (на втором месте), с максимальным такая же ситуация. После выполнения цикла находится минимальное произведение среди допустимых вариантов из выше приведённой логики. Минимальное произведение записывается в переменную minimum, чтобы было меньше операций для сравнивания. В самом конце - выводится это минимальное число.
Результат:
3
-5
1
0
-5
3
0
1
2
0