Форум программистов, компьютерный форум CyberForum.ru

Массив - C++

Восстановить пароль Регистрация
 
Serjant0007
2 / 2 / 0
Регистрация: 21.06.2010
Сообщений: 247
16.11.2010, 17:41     Массив #1
1.(одномерный) В заданном массиве найти самую маленькую серию подряд стоящих нечетных элементов.
2. (многомерный) Удалить из массива целых положительных элементов совершенные числа. Создать функции определения совершенного числа и удаления элементов массива.
Будьте добры помогите, сегодня тока начали изучать но я что то не понял
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2010, 17:41     Массив
Посмотрите здесь:

C++ Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W
Сформировать массив А из четных элементов исходного массива, а массив В - из нечетных C++
Массив: Переписать элементы одномерного массива A, попадающие в интервал [2, 6], в массив B. C++
динамический массив (Целое число разложить на массив простых множителей) C++
C++ Массив: Переместить в массив Y все числа, дробная часть которых больше 5.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.11.2010, 17:48     Массив #2
Цитата Сообщение от Serjant0007 Посмотреть сообщение
В заданном массиве найти самую маленькую серию подряд стоящих нечетных элементов.
а что надо вывести в итоге?
Serjant0007
2 / 2 / 0
Регистрация: 21.06.2010
Сообщений: 247
16.11.2010, 21:45  [ТС]     Массив #3
Цитата Сообщение от go Посмотреть сообщение
а что надо вывести в итоге?
как я понял например: 1 2 3 4 5 6 -1 2 3 -2 -5 -6 -8 и вот самая маленькая серия будет число -1
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.11.2010, 22:29     Массив #4
1, 3, 5, -1, 3, -5

это всё серии нечётных элементов

а если бы там было 1, 3 3 3, 5 67 - три серии нечётных элементов, какая из них самая маленькая ?
Serjant0007
2 / 2 / 0
Регистрация: 21.06.2010
Сообщений: 247
16.11.2010, 22:31  [ТС]     Массив #5
думаю что первая самая маленькая
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.11.2010, 22:48     Массив #6
а из этих 1, 3, 5, -1, 3, -5 ?
Serjant0007
2 / 2 / 0
Регистрация: 21.06.2010
Сообщений: 247
16.11.2010, 22:54  [ТС]     Массив #7
хм.....может быть все? Или -1
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.11.2010, 23:01     Массив #8
почему -1
у тебя должна быть одна стратегия для всех видов серий

а для таких 1 1 1, 3 ?

и все быть тоже не могут
Serjant0007
2 / 2 / 0
Регистрация: 21.06.2010
Сообщений: 247
16.11.2010, 23:06  [ТС]     Массив #9
эти задачи нас когда нить добьют, мы всю пару сидели решали их так ничего путного не сделали.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.11.2010, 05:11     Массив #10
перед тем как писать код, надо понять, что нужно написать
Serjant0007
2 / 2 / 0
Регистрация: 21.06.2010
Сообщений: 247
17.11.2010, 08:10  [ТС]     Массив #11
ды я знаю это))) Ну ладно пускай пару ставит. Спасибо большое за то что хотели помочь))))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2010, 03:33     Массив
Еще ссылки по теме:

Заполнить массив строк из файла. Массив заполняется, но выводится не корректно C++
Сжать массив, выбросив из него отрицательные элементы - массив становится пустым C++
Как в массив скопировать массив, который заполнен через указатели C++

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.11.2010, 03:33     Массив #12
наверное имеется в виду самую короткую серию
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
#include <stdio.h>
 
/* находит индекс и длину кратчайшей серии нечётных чисел */
int main(void)
{
    int n[10] = { 1, 3, 1, 3, 2, 3, 7, 8, -1, 9 };
    int i, count;
    int minseqlen, minseqind;
    
    minseqlen = sizeof n / sizeof n[0];
    minseqind = -1;
    
    count = 0;
    for (i = 0; i < 10; i++)
        if (n[i] % 2 != 0) {
            count++;
            if (i + 1 == 10 && count < minseqlen) {
                minseqlen = count;
                minseqind = i - count + 1;
            }
        } else if (count > 0 && count < minseqlen) {
            minseqlen = count;
            minseqind = i - count;
            count = 0;
        }
 
    printf("len = %d, ind = %d" "\n", minseqlen, minseqind);
    
    return 0;    
}
Код
[guest@localhost tests]$ ./t
len = 2, ind = 5
[guest@localhost tests]$
Добавлено через 13 часов 13 минут
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
#include <stdio.h>
 
size_t condremove_array(int arr[], size_t nobj, int (*check)(int));
int isposit(int n), isnegat(int n), iseven(int n), isodd(int n);
 
int main(void)
{
    int n[10] = { 1, 3, 1, 3, -8, 3, 7, 8, -1, 9 };
    int i;
    int newsize;
 
#if 1
    printf("remove all positive:\n");
    newsize = 10 - condremove_array(n, 10, &isposit);
#endif
 
#if 0
    printf("remove all negative:\n");
    newsize = 10 - condremove_array(n, 10, &isnegat);
#endif
 
#if 0
    printf("remove all even:\n");
    newsize = 10 - condremove_array(n, 10, &iseven);
#endif
    
#if 0
    printf("remove all odd:\n");
    newsize = 10 - condremove_array(n, 10, &isodd);
#endif
    
    for (i = 0; i < newsize; i++)
        printf("%d%s", n[i], (i + 1 < newsize ? " " : "\n"));
    printf("newsize: %d" "\n", newsize);
    
    return 0;
}
 
/* удалить из массива элементы по условию */
size_t condremove_array(int arr[], size_t nobj, int (*check)(int))
{
    size_t i, j, count;
    
    for (i = 0; i < nobj - 1; i++)
        for (j = i + 1; j < nobj; j++)
            if (check(arr[i]) && !check(arr[j])) {
                int tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
    
    count = 0;
    for (i = 0; i < nobj; i++)
        if (check(arr[i]))
            count++;
    
    return count;
}
 
int isposit(int n)
{
    return n > 0;    
}
 
int isnegat(int n)
{
    return n < 0;
}
 
int iseven(int n)
{
    return n % 2 == 0;
}
 
int isodd(int n)
{
    return n % 2 != 0;
}
Код
[guest@localhost tests]$ ./t
remove all positive:
-8 -1
newsize: 2
[guest@localhost tests]$
Yandex
Объявления
18.11.2010, 03:33     Массив
Ответ Создать тему
Опции темы

Текущее время: 10:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru