Обьясните что делает код
Вообщем есть массив на і элементов. Программа после i элемента удаляет i элементов т.е после 0 элемента удаляет 0 элементов, после 1 элемента 1 элемент, после 2 удаляет 2 и т.д. [1 2 3 4 5]-[1 2 4] Помогите разобрать код, как он работает я не пойму. Функция fillArr(size) это заполнение массива элементами
int main()
{
setlocale(LC_ALL,"rus");
int size=0;
cout << "Task 1" << endl;
cout << "Введите размер массива: ";
cin >> size;
fflush(stdin);
int *arr= fillArr(size);
int nsize = size,nsize2 = size;
int k = 0;
for(int i = 0; i < nsize; i++)
{
for(int j = 0; j < i;j++)
{
for(int m = 0;m<nsize-i;m++)
{
arr[m + k + 1] = arr[m + k + 2];
}
nsize--;
if(nsize - i > 0)
nsize2--;
}
k++;
}
for(int i = 0; i < nsize2; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}` `
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
код просто смещает правую часть массива влево на i элементов, т.е. по сути вырезает i элементов
for(int i = 0; i < nsize; i++)
{
// вырезаем i элементов после i-ого элемента
// увеличиваем размер нового массива
k++;
}
смещаем элементы массива на i влево
for(int j = 0; j < i;j++)
{
for(int m = 0;m<nsize-i;m++)
{
arr[m + k + 1] = arr[m + k + 2];
}
}
но вообще код несколько кривоват и избыточен, можно сделать гораздо проще и за время O(n)