как убрать все нули в динамическом массиве?
есть у нас динамический массив n-го размера, мы его заполняем, но если в нем есть нули, то их убираем(передвинув на их место следующие элементы без нарушения порядка их следования), а после весь массив выводим. У самого не получилось. Есть в голове идея, сделать это с еще одним массивом и добавлять туда значения не равные 0, но изначально захотелось сделать компактнее(не считается одной из постановок задачи).
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Rus");
int* a;
int i, k, n;
printf("Введите размер массива: ");
scanf_s("%d", &n);
a = (int*)malloc(n * sizeof(int));
for (i = 0; i < n; i++) {
printf("a[%d]= ", i);
scanf_s("%d", &a[i]);
}
for (i = 0; i <= n; i++) {
if (a[i] == 0) {
i++;
}
if (i > n) {
printf("% d", a[i]);
return 1;
}
printf("% d", a[i]);
}
free(a);
return 0;
}
Ответы (1 шт):
Автор решения: citn
→ Ссылка
Окончательный вид программы:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Rus");
int* a;
int i, k, n;
printf("Введите размер массива: ");
scanf("%d", &n);
if (n == 0) {
printf("Размер массива должен быть <0");
return 1;
}
a = (int*)malloc(n * sizeof(int));
for (i = 0; i < n; i++) {
printf("a[%d]= ", i);
scanf("%d", &a[i]);
}
size_t dst = 0; for (size_t src = 0; src < n; ++src) if (a[src] != 0) a[dst++] = a[src];
for (size_t i = 0; i < dst; ++i) printf("%d ", a[i]);
free(a);
return 0;
}