Дан одномерный массив целых чисел А. Создать новый массив В, занеся в каждый элемент минимальный среди всех предыдущих элементов массива А

#include <iostream>
#include <locale.h>
#include <conio.h>
#include <math.h>
using namespace std;
for(i=0; i<n; i++) {
  if (i==0) B[i] = A[i];
  else {
    if (A[i-1] < B[i-1]) B[i] = A[i-1];  
    else   B[i] = B[i-1];
}
void main() {
setlocale(0, "");
int n, i
 
int *A;
cout « "Введите размер массива:" « endl;
cin » n;
A = new int[n];
cout « "Введите массив A:" « endl;
for (i = 0; i < n; i++) {
cin » A[i];
}    

Помогите с этим заданием, пожалуйста. Дан одномерный массив целых чисел А. Создать новый массив В, занеся в каждый элемент минимальный среди всех предыдущих элементов массива А (в первый элемент заносится первый элемент А). Подсчет минимального элемента из предыдущих реализуется в виде функции.


Ответы (2 шт):

Автор решения: HolyBlackCat

Модное решение в одну строчку:

int *B = new int[n];
std::inclusive_scan(A, A + n, B, [](int x, int y){return std::min(x, y);});

Но черта с два у вас такое примут. :Р Если хотите нормальное решение, попытайтесь что-то сделать сами и покажите свой код, будем чинить.

→ Ссылка
Автор решения: Mikhailo

Вот так:

int main() {
    int n;
    cin >>  n;
    int* A = new int[n], *B = new int[n];
    cin >> A[0];
    int m = A[0];
    B[0] = A[0];

    for (int i = 1; i < n; i++) {
        cin >> A[i];

        if (m > A[i]) m = A[i];

        B[i] = m;
        }

    for (int i = 0; i < n; i++) {
        cout << B[i] << " ";
        }
    }
→ Ссылка