Удаление N элементов, начиная с номера K, где N и K вводятся с клавиатуры

#include <iostream>
#include <cmath>
#include <windows.h>
#include <stdlib.h>
#include <iomanip>
using namespace std;
 
int main()
{ 

    srand(time(NULL));
    int size, N, K, p = 0;
    cout << "size="; cin >> size;
 
    int *a = new int[size];
 
    for (int i = 0; i < size; i++)
    {
        a[i] = rand() % 100;
        cout << a[i] << " ";
    }

    cout << "\n";
 
    cout << "N="; cin >> N;
    cout << "K="; cin >> K;
 
    int leng = (size - N - 1);
    int *be = new int[leng];
    
    for (int i = 0; i < K - 1; i++) be[i] = a[i];
    for (int i = K + N; i < size; i++) be[i - N - 1] = a[i];
 
delete[]a;
 
    for (int i = 0; i < leng; i++)
        cout << be [i] << " ";
    
    cout << "\n";
 
 delete[]be;
    system("pause");
    return 0;
}

Всем привет! Задача сделать такую программу, которая бы удаляла N элементов, начиная с номера K, где N и K вводятся с клавиатуры!

Вот вывод программы:

size=10
46 8 41 31 74 76 86 96 82 94 // исходный массив
N=3
K=4
46 8 41 96 82 94 // модифицированный массив

Тоесть оно начала удаление с 4 элемента (31), тут все правильно, N = 3, получается что оно должна удалить 4 элемент, 5 и 6. Но при выводе в модифицированном массиве получается что оно удалило не 3 элемента, а 4.

Почему так? Надеюсь на вашу помощь, буду очень благодарен.


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

Автор решения: Artem.rtv

Во первых:

int leng = (size - N);

На мой взгляд это более логично, потому что size это количество элементов а N - сколько убираем. Тогда leng действительно будет отражать то, что должно отражать. Тогда нужно поменять только:

for (int i = K + N - 1; i < size; i++) be[i - N] = a[i];

K + N - 1 поскольку индексирование идёт с нуля, не забывайте об этом

→ Ссылка