Проблема в том не могу написать удаление элемента из одномерного массива и сдвиг
(элемент проверяем есть ли в массиве, размер массива после удаления естественно понижаем)
#include <stdio.h>
#include <windows.h>
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int a[10], n, id, p;
printf("Введите размер массива: ");
scanf("%d", &n);
printf("Введите элементы\n");
for (int i = 0; i < n; i++)
{
fflush(stdin);
scanf("%d", &a[i]);
}
fflush(stdin);
printf("Введите элемент для удаления: ");
scanf("%d", &id);
fflush(stdin);
p = 1;
while (p != 0)
{
p = 0;
for (int i = 0; i < n; i++)
{
if (id == a[i])
{
for (int j = 0; j < n; j++)
{
a[j] = a[j + 1];
}
}
}
n--;
for (int i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("\np = \n");
scanf("%d", &p);
fflush(stdin);
}
return 0;
}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Простой вариант (неэффективный)
for (int i = n-1; i >=0 ; i--)
{
if (id == a[i])
{
for (int j = i; j < n - 1; j++)
{
a[j] = a[j + 1];
}
n--;
}
}
Более эффективный:
int cnt = 0;
for (int i = 0; i < n; i++)
{
if (id == a[i])
cnt++;
else
a[i - cnt] = a[i];
}
n-= cnt;
Для 5 1 3 2 1 2 2
Выдаёт 1 3 1
