Домашнее задание Петя успевает по математике лучше всех в классе, поэтому учитель дал ему сложное домашнее задание, в котором нужно в заданном наборе целых чисел найти сумму всех положительных элементов, затем найти, где в заданной последовательности находятся максимальный и минимальный элемент, и вычислить произведение чисел, расположенных в этой последовательности между ними. Также известно, что минимальный и максимальный элемент встречаются в заданном множестве чисел только один раз и не являются соседними. Поскольку задач такого рода учитель дал Пете около ста, то Петя как сильный программист смог написать программу, которая по заданному набору чисел самостоятельно находит решение. А вам слабо? Входные данные В первой строке записано единственное число N (N⩽15) — количество элементов массива. Вторая строка содержит N целых чисел, представляющих заданный массив. Все элементы массива разделены пробелами. Каждое из чисел во входном файле, в том числе и N, не превышает 20 по абсолютной величине. Выходные данные В единственную строку нужно вывести два числа, разделённые пробелом: сумму положительных элементов и произведение чисел, расположенных между минимальным и максимальным элементами. Значения суммы и произведения не превышают по модулю 106. Решить с помощью вектор инт. Мой код рабочий, но пишет неправильно.
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
int a = 0;
cin >> n;
vector < int > v(n);
for (int i = 0; i < n; ++i) {
cin >> v[i];
}
for (int i = 0; i < n; ++i) {
if (v[i] > 0) {
a = a + v[i];
}
}
int imn = 0, imx = 0;
for (int i = 0; i < n; ++i) {
if (v[i] < v[imn]) {
imn = i;
}
if (v[i] > v[imx]) {
imx = i;
}
}
int b = imn + 1;
int c = b;
for (int b = imn + 1; b < imx; ++b) {
c *= b;
}
cout << a << " " << c;
return 0;
}
C/C++
Задача на С++
Ошибка в том, что у вас предполагается imn расположенный перед imx, хотя может быть и наоборот.
К примеру после вычисления imn и imx сделайте следующее: if(imn>imx) swap(imn,imx). Тогда счетчик всегда будет начинаться от меньшего к большему. Ну а то что в индексе imin окажется imax и наоборот - нам не важно, ведь нам нужны только границы.
К примеру после вычисления imn и imx сделайте следующее: if(imn>imx) swap(imn,imx). Тогда счетчик всегда будет начинаться от меньшего к большему. Ну а то что в индексе imin окажется imax и наоборот - нам не важно, ведь нам нужны только границы.
#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>
using namespace std;
int main() {
const size_t min_length = 1;
const size_t max_length = 15;
vector<int> box(max_length);
size_t length;
cin >> length;
length = clamp(length, min_length, max_length);
const auto min_value = -20;
const auto max_value = 20;
for (size_t i = 0; i < length; ++i) {
cin >> box[i];
box[i] = clamp(box[i], min_value, max_value);
}
auto even = [](int acc, int x) {
return ~x & 1 ? acc + x : acc;
};
const auto last = box.begin() + length;
const auto sum = accumulate(box.begin(), last, 0, even);
auto [pmin, pmax] = minmax_element(box.begin(), last);
auto& start = pmin < pmax ? pmin : pmax;
++start;
auto& stop = pmin > pmax ? pmin : pmax;
const auto mul = accumulate(start, stop, 1LL, multiplies<>());
cout << sum << ' ' << mul << '\n';
}
#include <iostream>
#include <numeric>
#include <vector>
using namespace std;
int main() {
const size_t min_length = 1;
const size_t max_length = 15;
vector<int> box(max_length);
size_t length;
cin >> length;
length = clamp(length, min_length, max_length);
const auto min_value = -20;
const auto max_value = 20;
for (size_t i = 0; i < length; ++i) {
cin >> box[i];
box[i] = clamp(box[i], min_value, max_value);
}
auto even = [](int acc, int x) {
return ~x & 1 ? acc + x : acc;
};
const auto last = box.begin() + length;
const auto sum = accumulate(box.begin(), last, 0, even);
auto [pmin, pmax] = minmax_element(box.begin(), last);
auto& start = pmin < pmax ? pmin : pmax;
++start;
auto& stop = pmin > pmax ? pmin : pmax;
const auto mul = accumulate(start, stop, 1LL, multiplies<>());
cout << sum << ' ' << mul << '\n';
}
#include
#include
#include
using namespace std;
int main() {
int n, sum = 0, mult = 1;
cin >> n;
vector < int > v(n);
for (int i = 0; i < n; ++i) { cin >> v[i]; }
auto m = minmax_element(v.begin(), v.end());
for (auto i = m.first + 1; i < m.second; ++i) { sum += *i; mult *= *i; }
cout
Похожие вопросы
- Решите задачу на любом языке. Желательно на с++.
- Задачу написать на с++ , она не сложная но почему то не получается напишите задачу с помощью цикла
- Решите задачу на с++, или хотя бы скажите идею как это вообще решать пожалуйста.
- Решите задачу на любом языке, или хотя бы скажите идею как это вообще решать пожалуйста.
- СРОЧНО! Помогите с задачей.
- Помогите с кодом задачи c++. задача на фото
- Задача по программированию. Решить на Python или C++
- Помогите решить задачу по программированию на C++
- Можете подсказать по задаче или дать алгоритм задачи, код опять же не нужен
- Решите, пожалуйста, задачу на c++
5
1 2 3 4 5
неправильный оутпут