Дано N целых чисел. Требуется выбрать из них три таких числа, произведение которых максимально.
Формат входных данных
Во входном файле записано сначала число N — количество чисел в последовательности (3≤N≤106). Далее записана сама последовательность: N целых чисел, по модулю не превышающих 30000.
Формат выходных данных
В выходной файл выведите три искомых числа в любом порядке. Если существует несколько различных троек чисел, дающих максимальное произведение, то выведите любую из них.
входные данные
9
3 5 1 7 9 0 9 -3 10
9 10 9
выходные данные
3
-5 -30000 -12
-5 -30000 -12
C/C++
С++. Наибольшее произведение. Помогите пожалуйста
#include <fstream>
#include <vector>
#include <algorithm>
int main() {
std::fstream file("INPUT.TXT", std::ios::in);
size_t n;
file >> n;
std::vector<short> v;
v.reserve(n);
for (size_t i = 0; i < n; ++i) {
short item;
file >> item;
v.emplace_back(item);
}
file.close();
std::sort(v.begin(), v.end());
const auto p1 = (long long)v[0] * v[1] * v[n - 1];
const auto p2 = (long long)v[n - 3] * v[n - 2] * v[n - 1];
file.open("OUTPUT.TXT", std::ios::out);
if (p1 > p2)
file << v[0] << ' ' << v[1] << ' ' << v[n - 1];
else
file << v[n - 3] << ' ' << v[n - 2] << ' ' << v[n - 1];
return 0;
}
#include <vector>
#include <algorithm>
int main() {
std::fstream file("INPUT.TXT", std::ios::in);
size_t n;
file >> n;
std::vector<short> v;
v.reserve(n);
for (size_t i = 0; i < n; ++i) {
short item;
file >> item;
v.emplace_back(item);
}
file.close();
std::sort(v.begin(), v.end());
const auto p1 = (long long)v[0] * v[1] * v[n - 1];
const auto p2 = (long long)v[n - 3] * v[n - 2] * v[n - 1];
file.open("OUTPUT.TXT", std::ios::out);
if (p1 > p2)
file << v[0] << ' ' << v[1] << ' ' << v[n - 1];
else
file << v[n - 3] << ' ' << v[n - 2] << ' ' << v[n - 1];
return 0;
}
Сам алгоритм нахождения таких троек несложный, особенно если каждое число можно выбирать трижды. Но при больших N, начиная где-то с тысячи, могут появляться лаги. Однако если N не превышает ста шести, то это всё ерунда! А вот насчёт чтения из файла и запись в файл - это всё дешёвые понты..
max = a[0]*a[0]*a[0];
for (i = 0; i < N; i++) { p=a[i];
for (j = i; j < N; j++) { p *= a[j];
for (k = j; k < N; k++) { p *= a[k];
if (p > max) { A = a[i]; B = a[j]; C = a[k]; } } } }
cout << A << ' ' << B << ' ' << C << endl;
max = a[0]*a[0]*a[0];
for (i = 0; i < N; i++) { p=a[i];
for (j = i; j < N; j++) { p *= a[j];
for (k = j; k < N; k++) { p *= a[k];
if (p > max) { A = a[i]; B = a[j]; C = a[k]; } } } }
cout << A << ' ' << B << ' ' << C << endl;
Похожие вопросы
- Помоги пожалуйста с программой в С++
- Помогите пожалуйста написать программу на Си
- Помогите пожалуйста уже голову сломал, ничего не получается, когда перегружаю шаблонный оператор << ,
- Помогите пожалуйста написать код.(C++)
- Задачки по С++ (помогите пожалуйста кто какие сможет)
- Помогите пожалуйста с программой
- Помогите пожалуйста с C++
- Помогите пожалуйста решить задачу на языке С#.
- Помогите пожалуйста составить задачу на программе С++
- Помогите, пожалуйста решить на C++, используя многомерные статические массивы
https://acmp.ru/index.asp?main=task&id_task=224