С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
PFanthem
0 / 0 / 1
Регистрация: 11.10.2014
Сообщений: 115
1

Разреженный массив

27.09.2015, 12:07. Просмотров 833. Ответов 2
Метки нет (Все метки)

Дан одномерный массив с большим количеством нулевых элементов.
Заменить в нем каждую группу из подряд идущих нулей на 2 элемента: первый из них 0, а второй – количество нулей в данной группе, используя функции
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2015, 12:07
Ответы с готовыми решениями:

Разреженный массив
Друзья, как реализовать разреженный массив через односвязный список? Попытался...

Разреженный массив
Есть ли где ещё, кроме как у Герберта Шилдта, рекомендации по разработке...

Разреженный массив
Имеется разряженный массив. int a = ; В нем 2 пустых места между 2..4 и...

Ленточный разреженный массив С++
Нужно заполнить матрицу так, чтобы числами были заполнены главная диагональ, и...

Разреженный массив на основе массива указателей
Имеется код, вполне работоспособный. только я не могу этот класс сделать...

2
Геомеханик
792 / 597 / 939
Регистрация: 26.06.2015
Сообщений: 1,409
28.09.2015, 07:19 2
Лучший ответ Сообщение было отмечено PFanthem как решение

Решение

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
int  pack_null_i(int* arr, int num);
int* pack_null_p(int* fa, int* la);
 
 
int main(void){
    int a[] = { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 };
    int  n  = sizeof(a)/sizeof(a[0]);
    
    n = pack_null_i(a, n);
    for(int i = 0; i < n; ++i)
        std::cout << a[i] << ' ';
    std::cout << std::endl;
 
    //...
 
    int b[] = { 0, 0, 0, 0, 1, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0 };
 
    int* e  = pack_null_p(b, b + sizeof(b)/sizeof(b[0]));
    for(const int* p = &b[0]; p != e; ++p)
        std::cout << *p << ' ';
    return 0;
}
 
//индексный вариант
int pack_null_i(int* arr, int num){
    int a, b, i, k, m = num;
 
    for(a = 0; a < (num - 1); ++a){
        if((arr[a] == 0) && (arr[a + 1] == 0))
            break;
    }
    for(b = a; b < num; arr[b] = arr[a]){
        if(arr[a] == 0){
            i = a;
            while((i < m) && (arr[i] == 0))
                ++i;
 
            k = i - a;
            if(k > 1){
                arr[++b] = k;
                b       += 1;
                a        = i;
                num     -= k - 2;
                continue;
            }
        }
        ++b;
        ++a;
    }
    return num;
}
 
//вариант на указателях
int* pack_null_p(int* fa, int* la){
    int* a, *b, *p, k, *e = la;
 
    for(a = fa; a < (la - 1); ++a){
        if((*a == 0) && (*(a + 1) == 0))
            break;
    }
    for(b = a; b != la; *b = *a){
        if(*a == 0){
            p = a;
            while((p != e) && (*p == 0))
                ++p;
 
            k = (int)(p - a);
            if(k > 1){
                *(++b) = k;
                b     += 1;
                a      = p;
                la    -= k - 2;
                continue;
            }
        }
        ++b;
        ++a;
    }
    return la;
}
Пример работы кода
0
zss
Модератор
Эксперт С++
7509 / 6866 / 4336
Регистрация: 18.12.2011
Сообщений: 18,177
Завершенные тесты: 1
28.09.2015, 08:41 3
Разреженный одномерный массив: заменить группу из подряд идущих нулей
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2015, 08:41

Разреженный одномерный массив: заменить группу из подряд идущих нулей
Дан одномерный массив с большим количеством нулевых элементов. Заменить в нем...

Разреженный массив (с использованием шаблонов), исключение оператора посредством SFINAE
Доброго времени суток. не так давно начал изучать плюсы, и если с...

Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента, и имеющие нечетный индекс. Массив В отсортировать
Добрый Вечер! Написал первую часть программы по этому заданию&quot;Ввести массив А....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru