Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Где ошибка? Задача на C++

Артемий Рубцов Ученик (104), открыт 3 недели назад
Максимальное произведение
В массиве, заполненном произвольными целыми числами, найдите два числа, произведение которых максимально. Вложенные циклы не используйте.

Входные данные

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

Выходные данные

Выдайте два искомых числа в порядке неубывания.

вот мой код:

#include <iostream>
#include <Vector>
using namespace std;
using ll = long long;
using ld = long double;
int main()
{
int n, now, mx, pmx;
cin >> n, now;
vector <int> v(n);
v.push_back(now);
for (int i = 1; i < n; ++i) {
cin >> now;
v[i] = now;
}
int maxpr = v[0] * v[1];
mx = v[1];
pmx = v[0];
for (int l = 1; l < n; l+=1) {
if (v[l-1] * v[l] > maxpr){
maxpr = v[l-1] * v[l];
mx = v[l-1];
pmx = v[l];
}
}
if (mx >= pmx) {
cout << pmx << " " << mx;
}else{
cout << mx << " " << pmx;
}
return 0;
}


ошибка в этом тесте:
5
-4 3 -5 2 5
выводит:
-4 0
нужно:
-5 -4
2 ответа
Sergio 2.1 Оракул (67269) 3 недели назад
 #include <iostream> 
#include <vector>
#include <algorithm>
using namespace std;

int main() {
int n;
cin >> n;
vector<int> v(n);

// Ввод массива
for (int i = 0; i < n; ++i) {
cin >> v[i];
}

// Находим два минимальных и два максимальных элемента
int max1 = -30001, max2 = -30001;
int min1 = 30001, min2 = 30001;

for (int x : v) {
if (x > max1) {
max2 = max1;
max1 = x;
} else if (x > max2) {
max2 = x;
}

if (x < min1) {
min2 = min1;
min1 = x;
} else if (x < min2) {
min2 = x;
}
}

// Сравниваем произведения
if (min1 * min2 > max1 * max2) {
cout << min1 << " " << min2;
} else {
cout << max2 << " " << max1;
}

return 0;
}
Артемий РубцовУченик (104) 3 недели назад
спс
Николай Веселуха Высший разум (368837) 3 недели назад
 #include <algorithm> 
#include <iostream>
#include <vector>
using namespace std;
long long task(const vector<long>& nums) {
const auto len = nums.size();
if (len < 2) return numeric_limits<long long>::min();
if (len == 2) return static_cast<long long>(nums.front() * nums.back());
auto v = nums;
sort(begin(v), end(v));
const auto a = v[0] * v[1];
const auto b = v[len - 1] * v[len - 2];
return a < b ? b : a;
}
int main() {
size_t n;
cin >> n;
vector<long> nums(n);
for (auto& num : nums) cin >> num;
const auto result = task(nums);
cout << result << '\n';
}
Похожие вопросы