1

Тема: Дії з векторами

Доброго дня.
Є дві послідовності інтів A[m] та B[k], які користувач вводить з клавіатури. -1 - це число, після якого введення припиняється.
При введенні чисел у другу послідовність перша змінюється наступним чином:
якщо B[k]>0, то в кінець першої послідосності додаємо число B[k] , B[k] кількість разів
якщо B[k]=0, то нічого не робимо
якщо B[k]<0, то видаляємо з першої послідовності  видаляємо останні |B[k]| елементів
якщо B[k]<0 та в першій послідовності меньше елементів ніж B[k], то виводимо на екран -1

В кінці вивести елементи першої послідовності A[m]
приклад введення
Input:
1 2 3 4 5 6 -1 2 -1
Output:
1 2 3 4 5 6 2 2 -1

Я реалізував все за допомогою векторів. Але є проблеми з додаванням елементів в першу послідовність та з видаленням. Десь є помилка. Код нижче. Допоможіть, будь ласка.

#include "pch.h"
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector <int> masA;
    
    int num,tn=-1;
    cout << "inpt sequ A:";
    do
    {
        cin >> num;
        if (num != -1)
            masA.push_back(num);
    } while (num != -1);
    
    vector <int> masB;
    cout << "inpt sequ B:";
    do
    {
        cin >> num;
        
        if(num!=-1)
            masB.push_back(num);

        if (num > 0)
            masA.insert(masA.end(), num, num);
            
        
        if (num < 0)
        {
            if (masA.size() < abs(num))
                num = -1;
            else
                masA.erase(masA.begin()+(masA.size()-abs(num)),masA.end());
        }
            

    } while (num != -1);


    cout << "output sequ A:";
    for (auto x : masA)
        cout << x << ' ';
    cout << tn <<endl;

    return 0;
}
Подякували: varkon1

2 Востаннє редагувалося koala (13.03.2019 07:52:08)

Re: Дії з векторами

1. Умова трохи недовизначена. "якщо B[k]<0 та в першій послідовності меньше елементів ніж B[k], то виводимо на екран -1" - просто виводимо і продовжуємо обробку? Чи припиняємо? Можлива ситуація, коли ми ще не закінчили введення B, а програма вже вивела -1?
2. masB ніде не використовується, його можна виключити. Елементи B[k] на час обробки знаходяться в змінній num. Якщо, звісно, не малося на увазі "спершу вводимо, потім обробляємо". Теж недовизначення.
3. Ви обробляєте -1 в другій послідовності як її елемент.
4. Ви не перевіряєте, чи є в masA достатньо елементів для видалення.
5. Ви не описуєте, які саме "проблеми з додаванням елементів в першу послідовність та з видаленням" ви маєте. Можливо, мої попередні зауваження допоможуть вирішити їх, а можливо - ні, не знаю, бо не знаю, які саме це проблеми.

Подякували: varkon, leofun01, zbst3

3

Re: Дії з векторами

1. "якщо B[k]<0 та в першій послідовності меньше елементів ніж B[k], то виводимо на екран -1" - та припиняємо роботу. Ми вводимо, обробляємо та припиняємо або продовжуємо(якщо ця умова не виконується).
2.masB спершу вводимо, потім обробляємо
3.Ви обробляєте -1 в другій послідовності як її елемент. Так, я виправив це.
4. Зробив.
5. Дякую, ваші зауваження допомогли))