0 / 0 / 0
Регистрация: 07.08.2011
Сообщений: 5
1

Смещение членов массива

28.08.2011, 22:23. Показов 1535. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем задача: нужно найти все простые числа в динамическом массиве, удалить их, сместить оставшиеся элементы на 1 позицию влево от удаляемого элемента, а освобождающиеся элементы в конце массива заполнить нулями. Например, если начальный массив 4, 7, 12, 3, 56, то результатом должен быть массив 4, 12, 56, 0, 0.
Так вот, нужно составить алгоритм. Нахождение простых чисел я уже сделал, а вот смещение вместе с удалением не получается.
Прикрепил блок-схему. Нужно чтобы при нахождении первого простого элемента действовало "Vect[i] = Vect[i + 1]" для всех. Как это сделать не пойму.
Вложения
Тип файла: docx Простые числа в массиве.docx (75.6 Кб, 18 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.08.2011, 22:23
Ответы с готовыми решениями:

Смещение элементов одномерного массива
Осуществить сжатие массива А(30), удалив из него все положительные элементы.

Найти сумму первых 20 и 10 членов массива
С помощью датчика случайных чисел сформировать два массива X и Y размерностью 100 и 200 чисел в...

Найти максимальный из отрицательных членов массива
Найти максимальный из отрицательных членов массива с четными номерами (с учетом того, что их может...

Инициализация массива структур и форматированный вывод значений её членов
Я написал маленькую программу инициализации массива структур и форматированного вывода значений её...

6
385 / 229 / 12
Регистрация: 06.07.2011
Сообщений: 512
28.08.2011, 22:45 2
нули внутри списка чисел встречаться могут?
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
28.08.2011, 22:53 3
std::remove_if - для удаления
std::fill - для заполнения нулями

Добавлено через 1 минуту
Ну, или реализацию посмотри, там же по ссылкам.
0
0 / 0 / 0
Регистрация: 07.08.2011
Сообщений: 5
28.08.2011, 23:25  [ТС] 4
Paporotnik, внутри - нет. "0" - это простое число.

rangerx, код - это хорошо, но мне нужен алгоритм.
0
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
28.08.2011, 23:30 5
Ну у меня есть мысль делать все по очереди.
1). Пока есть простое число делаем обход массива
Если найдено прост. число, ставим vect[i] = vect[i+1] и все значения дальше до конца. vect[sizeof(vect)-j] приравниваем к нулю. j - количество проходов массива
0
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
28.08.2011, 23:38 6
если с++, тогда std::stable_partition + std::fill

MeghaNik, такие задачи в стиле С решать очень легко с помощью дополнительного массива.
копируйте туда простые числа, остаток заполните нулями.
по необходимости скопируйте новый массив на место старого (плохо).
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
29.08.2011, 01:46 7
Цитата Сообщение от MeghaNik Посмотреть сообщение
rangerx, код - это хорошо, но мне нужен алгоритм.
Ну, так что ты не можешь пару строк кода разобрать и составить алгоритм? Например, удаляем чётные
f - first
r - result

Бежим указателем f от начала до конца массива. Если элемент на который указывает f нечётный, то записываем по адресу r значение того на что указывает f, и перемещаем r одну позицию вперёд. И так до конца.
Код
1) 2 5 3 4 1 
   f  
   r

2) 2 5 3 4 1
     f
   r

3) 5 5 3 4 1
       f
     r   

4) 5 3 3 4 1
         f
       r  

5) 5 3 3 4 1
           f
       r   

6) 5 3 1 4 1
             f
         r
Остались нечётные: 5 3 1
теперь от r и до самого конца всё можно заполнить нулями.
Пример(максимально простой, без указателей)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
 
#define N 5
 
int main()
{
    int a[N] = { 2, 5, 3, 4, 1 };
 
    int i = 0;
    int r = 0;
 
    // удаляем чётные
    while(i != N)
    {
        if( (a[i] % 2) == 1 )
        {
            a[r] = a[i];
            ++r;
        }
        ++i;
    }
 
    // заполняем нулями освободившиеся позиции
    for(i = r; i < N; ++i)
        a[i] = 0;
 
 
    for(i = 0; i < N; ++i)
        printf("%d ", a[i]);
    putchar('\n');
 
    return 0;
}
0
29.08.2011, 01:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.08.2011, 01:46
Помогаю со студенческими работами здесь

найти сумму 10-ти членов следующих общих членов,которые даны снизу
найти сумму 10-ти членов следующих общих членов,которые даны снизу {a}_{n}={n}^{3}{e}^{n}

найти сумму 10-ти членов следующих общих членов,которые даны снизу
Найти сумму 10-ти членов следующих общих членов,которые даны снизу. {a}_{n} = {n}^{3}{e}^{-n}

Найти min число только из простых чисел - членов массива
Дан динамический массив из n целых чисел. Найти min число только из простых чисел - членов массива.

Заменить значения членов массива на значение одной из элементарных функций
Заменить значения членов массива на значение одной из элементарных функций, аргумент которой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru