Другие языки программирования и технологии

Программирование c++ написать программу

Дана размерность массива (200) Предел значений (-50 дефис 50)
Найти из непрерывных последовательностей отрицательных чисел ту, которая имеет наибольшее абсолютное значение среднего арифметического ее элементов
#include <iostream>
#include <iomanip>
#include <random>
using namespace std;
void fill(int* box, const size_t n) {
uniform_int_distribution<> uid(-50, 50);
random_device rd;
mt19937 gen(rd());
for (auto i = 0U; i < n; ++i) box[i] = uid(gen);
}
void show_box(int* box, const size_t n) {
for (auto i = 0U; i < n; ++i) cout << setw(4) << box[i];
cout.put('\n');
}
void show_sequences(int* box, const size_t n) {
bool flag = false;
for (auto i = 0U; i < n; ++i) {
if (box[i] < 0) {
if (!flag && i + 1 != n && box[i + 1] >= 0) continue;
cout << setw(4) << box[i];
if (!flag) flag = !flag;
}
else if (flag) {
cout.put('\n');
flag = !flag;
}
}
cout.put('\n');
}
double average(int* begin, int* end) {
if (!begin || !end) return 0;
auto n = end - begin;
auto s = .0;
while (begin != end) {
s += *begin;
++begin;
}
return n > 1? fabs(s / n) : 0;
}
int main() {
const auto n = 200U;
int box[n];
fill(box, n);
cout << "\t Array:\n";
show_box(box, n);
cout << "\n\t Sequence:\n";
show_sequences(box, n);
auto max_avg = .0;
int* begin = nullptr;
for (auto i = 0U; i < n; ++i) {
if (!begin && box[i] < 0) begin = &box[i];
if (begin && box[i] >= 0 || i + 1 == n) {
auto end = &box[i];
if (i + 1 == n) ++end;
auto avg = average(begin, end);
if (avg > max_avg) max_avg = avg;
begin = nullptr;
}
}
cout << "Result: " << max_avg << '\n';
system("pause");
}
ДБ
Диас Бахтияров
98 089
Лучший ответ
Alexei Vaganov Чел, ты гений, как ты это сделал научи по братски, таким людям сразу в Рай, если что заходи ко мне в дискорд)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) https://discord.gg/h4s2WM7R 20 людей готовые учиться