Удаление элементов массива стоящих перед минимальным элементом
Помогите бедному студенту. Задание звучит так - Удалить все элементы стоящие перед минимальным элементом, сдвинув массив влево. Уже неделю сижу, а лабу сдавать надо. Вот то что есть, но сдвиг происходит не правильно и не удаляет элементы.
#include <iostream>
#include <ctime>
int minI;
void leftRotatebyOne(int arr[], int n)
{
int temp = arr[0], i;
for (i = 0; i < n - minI; i++)
arr[i] = arr[i + minI];
arr[i] = temp;
}
using namespace std;
int main(){
int l, templ;
int minI = 0;
cout << "Enter the numbers of elements: ";
cin >> l;
srand(time(NULL));
int* mas = new int[l];
cout << "Array:" << endl;
for (int i = 0; i < l; i++)
{
mas[i] = rand() % 27;
cout << i + 1 << " Element: " << mas[i] << endl;
}
cout << endl;
int min = mas[0];
for(int i = 0; i < l; ++i)
{
if(mas[i] < min)
{
min = mas[i];
minI = i;
}
}
cout << endl;
cout << "Smallest Element in an Array:" << endl;
cout << min << endl;
cout << "Index" << endl;
cout << minI << endl;
cout << endl;
for ( int i = 1; i < l; i++){
templ = mas[minI];
mas[minI] = mas[l-minI];
mas[i] = templ;
cout << "Shift Left:"<< mas[i] <<endl;
}
return 0;
}
Ответы (1 шт):
Автор решения: GrizzlyK
→ Ссылка
в каком смысле "удалить"? в c++ в массивах нельзя "удалять" или "Добавлять" элементы, если не считать контейнеров, в памяти так и так что-то остается, вопрос только в том, чем вы замените "ненужные" элементы. Можно создать новый массив и переписать в него элементы согласно условиям задачи. В вашем случае можно сделать проще, последний цикл переписать на:
for (int i = l-1; i > minI; i--) {
l--;
}
или "перед ним" в смысле "ДО него"? тогда можно так
for (int a = 0, b = minI; b<l ; a++, b++) {
swap(mas[a], mas[b]);
}
l -= minI;