Удаление 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 шт):
Во первых:
int leng = (size - N);
На мой взгляд это более логично, потому что size это количество элементов а N - сколько убираем. Тогда leng действительно будет отражать то, что должно отражать.
Тогда нужно поменять только:
for (int i = K + N - 1; i < size; i++) be[i - N] = a[i];
K + N - 1 поскольку индексирование идёт с нуля, не забывайте об этом