Векторы

Задайте два вектора А (п) и В (m). Выполните следующие задачи:

определить вектор С так, чтобы все его элементы были равны сумме соответствующих элементов векторов А и В, если в А и В разница между любыми двумя соседними элементами не превышает максимального значения двух векторов; если же превышает, то D будет вектором нулевых элементов, количество которых равно целой части максимального значения с двух векторов;

найти произведение элементов вектора, расположенных между первым и вторым нулевыми элементами;

переделать вектор так, чтобы сначала располагались все элементы, равные нулю, а потом - все остальные элементы.

Вот что я смогла сделать. Я слабо понимаю первый пункт, поэтому ничего не смогла сделать. Кто может, помогите пожалуйста исправить. У меня уже мозг сломался

#include <stdio.h>
#include <iostream>
#include <cstdlib>
using namespace std;
const int Nmax = 100;
double a[Nmax];
int main(int argc, char** argv) {
int n,one,too,k=0,pr=1;
{
int n, m, *A, *B, *C;
cout<<"Введіть розмір масиву А\n"<<endl;
cin>>n;

cout<<"Введіть розмір масиву B\n"<<endl;
cin>>m;

A = new int [n];
B = new int [m];
int sum = 0;
for(int i=0;i<n;i++){
C <i>= A <i>+ B <i>;
}

cout<<"Введіть елементи масиву А\n"<<endl;
for(int i = 0; i< n; ++i)
{
cin>>A <i>;
}

cout<<"Введіть елементи масиву B\n"<<endl;
for(int i = 0; i< m; ++i)
{
cin>>B <i>;
}

int a[C];
for (int i=0; i<C; i++)
{cout << "a("<<i<<")="; cin>>a <i>;
}
for (int i=0;i<n; i++)
{
if (a <i>==0&&k<1)
{one=i;k++;}
}
for (int i=one;i<n; i++)
{
if (a[i+1]==0&&k<2)
{too=i+1;k++;}
}
for (int i=one+1;i<too; i++)
pr*=a <i>;
cout<<"Произведение элементов между первым и вторым элементами равно: "<<pr;
float b,max,a[100];

cout<<"Massiv a\n";
for(i=0;i<C;i++)
cin>>a <i>;
for(j=1;j<=n-1;j++)
for(i=0;i<=n-1-j;i++)
if (a <i>>a[i+1])
{
b=a <i>;
a <i>=a[i+1];
a[i+1]=b;
}
cout<<"Massiv a\n";
for(i=0;i<C;i++)
cout<<"a("<<i<<")="<<a <i><<"\t";
cout<<endl;

return 0;
}

Там может быть ошибка и вместо D должно быть С?

И судя по

может быть в векторах должны быть не int, а double?

А так тут видимо сначала надо пройти оба вектора (по очереди) и найти макс. значение.
Что такое “соседние” непонятно. Возможно надо снова пройти оба вектора и проверять (например завести общую bool переменную, изначально false) есть ли где-то (a[i] - a[i-1]) > max.
Если есть, то в С (?) положить нули, размер С — trunc(max). trunc - C++ Reference
Если нет, то размер С — большее из n и m, и заполнять как-то так:

cSize = std::max(n, m);
C = new double[cSize];
for (int i = 0; i < cSize; i++) {
    C[i] = 0;
    if (i < n) {
        C[i] += A[i];
    }
    if (i < m) {
        C[i] += B[i];
    }
}

В первых шагах выше чтобы не дублировать код для каждого вектора можно сделать функции принимающие массив и размер, и возвращающие результат (макс. значение в первом, bool во втором).

что-то все запутано