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

pelles c Задан целочисленный массив размера N - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 5.00
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
17.01.2011, 14:42     pelles c Задан целочисленный массив размера N #1
Задан целочисленный массив размера N. Отсортировать серии в массиве в порядке убывания их длины.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2011, 14:42     pelles c Задан целочисленный массив размера N
Посмотрите здесь:

C++ Задан целочисленный массив размера N. Отсортировать серии в массиве в порядке убывания их длины
Задан вещественный массив размера N pelles c C++
Дан целочисленный массив размера N. C++
2) Дан целочисленный массив размера N. Найти максимальное количество его одинаковых элементов C++
C++ Дан целочисленный массив размера N
Даны целые числа N(>2). Сформировать и вывести целочисленный массив размера N, C++
C++ Задан массив размера N. Определить число положительных элементов в массиве
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
17.01.2011, 21:42     pelles c Задан целочисленный массив размера N #2
napalm2005, Если бы объяснили бы что подрузамеваете по сериями, то цены бы Вам не было. Серии бывают:
- серия из одинаковых значений
- серия из значений упорядоченных по убыванию
- серия из значений упорядоченных по возрастанию
- серия из двузначных цифр
- серия из положительных элементов
- серия из простых чисел
и еще много много можно додумать.....
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
17.01.2011, 23:19  [ТС]     pelles c Задан целочисленный массив размера N #3
Цитата Сообщение от valeriikozlov Посмотреть сообщение
napalm2005, Если бы объяснили бы что подрузамеваете по сериями, то цены бы Вам не было. Серии бывают:
- серия из одинаковых значений
- серия из значений упорядоченных по убыванию
- серия из значений упорядоченных по возрастанию
- серия из двузначных цифр
- серия из положительных элементов
- серия из простых чисел
и еще много много можно додумать.....
Серия – последовательность одинаковых элементов в массиве
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
19.01.2011, 02:30  [ТС]     pelles c Задан целочисленный массив размера N #4
вобщем петрушка такая, пока я могу работать лишь с последней серией и первой, а вот как что между ними, вот этого я не знаю как делать.

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
#include <stdio.h>
 
int main(int argc, char *argv[])
{
        unsigned int n;
    printf("Enter size of array ");
    scanf("%u", &n);
    int arr[n];
    printf("Vvedite %u elementov:\n", n);
 
    for(int i = 0; i < n; i++){
        scanf("%d", &arr[i]);
    }
 
    unsigned int serie1 = 1;
    for(int i = 1; i < n; i++){
        if(arr[i] == arr[0]){serie1++;}
        else{break;}
    }
    printf("size of start serie is %u ", serie1);
 
    unsigned int serieposi = n-1;
    for(int i = n-2; i >=0; i--){
        if(arr[i] == arr[n-1]){serieposi--;}
        else{break;}
    }
    printf("\nstart index of seriepos is %u ", serieposi);
 
    
    return 0;
}
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
19.01.2011, 03:27     pelles c Задан целочисленный массив размера N #5
Этот код сортирует массив по убыванию элементов. Вам надо вместо i и j поставить серии. Пробуйте.
C++
1
2
3
4
5
6
7
8
for(int i=N-1; i<0;--i)
      for(int j=i; j<0; --j)
            if(mas[j]>mas[j-1])
                {
                   c=mas[j];
                   mas[j]=mas[j-1]
                   mas[j-1]=c;
                 }
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
19.01.2011, 03:31  [ТС]     pelles c Задан целочисленный массив размера N #6
Цитата Сообщение от Chelioss Посмотреть сообщение
Этот код сортирует массив по убыванию элементов. Вам надо вместо i и j поставить серии. Пробуйте.
C++
1
2
3
4
5
6
7
8
for(int i=N-1; i<0;--i)
      for(int j=i; j<0; --j)
            if(mas[j]>mas[j-1])
                {
                   c=mas[j];
                   mas[j]=mas[j-1]
                   mas[j-1]=c;
                 }
нет, мне нужновсе серии отсортировать в порядке возрастания.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
19.01.2011, 03:32     pelles c Задан целочисленный массив размера N #7
В том моем сообщении, кроме первого предложения, есть еще и второе, и даже третье! Это алгоритм сортировки! И еще, по условию надо по убыванию, а не по возрастанию.
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
19.01.2011, 03:39  [ТС]     pelles c Задан целочисленный массив размера N #8
Цитата Сообщение от Chelioss Посмотреть сообщение
В том моем сообщении, кроме первого предложения, есть еще и второе, и даже третье! Это алгоритм сортировки! И еще, по условию надо по убыванию, а не по возрастанию.
i<0 с условием того, что N строго положительное число.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
19.01.2011, 03:42     pelles c Задан целочисленный массив размера N #9
Точно, исправил:

C++
1
2
3
4
5
6
7
8
for(int i=N-1; i>0;--i)
      for(int j=i; j>0; --j)
            if(mas[j]>mas[j-1])
                {
                   c=mas[j];
                   mas[j]=mas[j-1]
                   mas[j-1]=c;
                 }
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
19.01.2011, 03:50  [ТС]     pelles c Задан целочисленный массив размера N #10
Цитата Сообщение от Chelioss Посмотреть сообщение
Точно, исправил:

C++
1
2
3
4
5
6
7
8
for(int i=N-1; i>0;--i)
      for(int j=i; j>0; --j)
            if(mas[j]>mas[j-1])
                {
                   c=mas[j];
                   mas[j]=mas[j-1]
                   mas[j-1]=c;
                 }
еще раз говорю, мне не нужна сортировка элементов, ее я могу получить без вопросов. А по поводу итых и джитых серий, я ее даже получить не могу. Я не знаю сколько серий между первой и последней.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
19.01.2011, 03:56     pelles c Задан целочисленный массив размера N #11
Если делать с помощью моего алгоритма, то просто находите последнюю серию, потом предпоследнюю, потом сравниваете их длины. При всем этот нужны переменные, в которых будут хранится начало и конец серии, для того, чтобы поменять местами серии.
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
19.01.2011, 10:46  [ТС]     pelles c Задан целочисленный массив размера N #12
Цитата Сообщение от Chelioss Посмотреть сообщение
Если делать с помощью моего алгоритма, то просто находите последнюю серию, потом предпоследнюю, потом сравниваете их длины. При всем этот нужны переменные, в которых будут хранится начало и конец серии, для того, чтобы поменять местами серии.
так в данном случае i И j это что вообще, это длины серий, конечные индексы серий, что это такое?

Добавлено через 8 минут
И еще одно, если речь идетодополнительном массиве, то в этой здаче его задествовать нельзя.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.01.2011, 12:10     pelles c Задан целочисленный массив размера N #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
#include <stdio.h>
 
int main()
{
        int N, *mas, i, i_max, i_t=0, fl=1, len_temp, len_max, i_temp; 
        printf("N= ");
        scanf("%d", &N);
        mas=new int[N];
        for(i=0; i<N; i++)
        {
            printf("[%d]= ", i);
            scanf("%d", &mas[i]);
        }
        for(i=0; i<N; i++)
            printf("%d ", mas[i]);
        printf("\n");
        while(i_t<N)
        {
            len_temp=len_max=1;
            i_temp=i_max=i_t;
            for(i=i_t+1; i<N; i++)
            {
                if(mas[i]!=mas[i-1])
                {
                    if(len_temp>len_max)
                    {
                        len_max=len_temp;
                        i_max=i_temp;
                    }
                    i_temp=i;
                    len_temp=1;
                }
                else
                    len_temp++;
            }
            if(len_temp>len_max)
            {
                len_max=len_temp;
                i_max=i_temp;
            }
            if(i_max!=i_t)
            {
                int temp=mas[i_max];
                for(i=i_max-i_t; i>0; i--)
                    mas[len_max-1+i_t+i]=mas[-1+i_t+i];
                for(i=0; i<len_max; i++)
                    mas[i_t+i]=temp;
            }
            i_t+=len_max;
        }
        for(i=0; i<N; i++)
            printf("%d ", mas[i]);      
        printf("\n"); 
        delete [] mas;
        return 0;
}
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
19.01.2011, 12:12     pelles c Задан целочисленный массив размера N #14
Это алгорит сортировки по убыванию значений элементов простого массива.
Никаких дополнительных массивов не надо.

Исправил еще раз)
C++
1
2
3
4
5
6
7
8
for(int i=0; i<N;++i)
      for(int j=N-1; j>i-1; --j)
            if(mas[j]>mas[j-1])
                {
                   c=mas[j];
                   mas[j]=mas[j-1]
                   mas[j-1]=c;
                 }
объясняю как работает этот алгоритм:
допустим есть массив
0 1 2 3 4 5 - индексы
2 3 1 4 5 3 - сам массив
За первый цикл сравнятся элементы с индексами 4 и 5
т.к. 3<5, то ничего не делаем
Дальше сравниваем 3 и 4 элемент
5>4, значит меняем их местами
2 3 1 5 4 3 - в итоге
дальше сравниваем 2 и 3 элементы
5>1, значит меняем местами
2 3 5 1 4 3 - в итоге
и так далее. будет в итоге -
5 2 3 1 4 3
Что мы этим добились? Мы за один цикл for(int i=0; i<N;++i) с помощью работы цикла for(int j=N-1; j>i-1; --j) переместили максимальный элемент в левую часть массива
теперь рассмотрим второй цикл for(int i=0; i<N;++i), т.е. теперь i=1
если внимательно посмотреть на for(int j=N-1; j>i-1; --j), то увидим, что будет просматриваться не весь массив, а массив с конца до i включительно, т.е. мы первый элемент на данном этапе рассматривать не будем, т.к. в нем уже стоит макс. элемент.
с помощью цикла for(int j=N-1; j>i-1; --j)
мы 4 передвинем на i(итое) место, т.е.
было
5 2 3 1 4 3
стало
5 4 2 3 1 3
Дальше уже должно быть понятно, что при i=2 будет результат такой
5 4 3 2 3 1
дальше при i=3
5 4 3 3 2 1
при i=4
5 4 3 3 2 1
при i=5
5 4 3 3 2 1
конец
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
19.01.2011, 12:17  [ТС]     pelles c Задан целочисленный массив размера N #15
Цитата Сообщение от valeriikozlov Посмотреть сообщение
А жалко.
Проверяйте:
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
#include <stdio.h>
 
int main()
{
        int N, *mas, i, i_max, i_t=0, fl=1, len_temp, len_max, i_temp; 
        printf("N= ");
        scanf("%d", &N);
        mas=new int[N];
        for(i=0; i<N; i++)
        {
            printf("[%d]= ", i);
            scanf("%d", &mas[i]);
        }
        for(i=0; i<N; i++)
            printf("%d ", mas[i]);
        printf("\n");
        while(i_t<N)
        {
            len_temp=len_max=1;
            i_temp=i_max=i_t;
            for(i=i_t+1; i<N; i++)
            {
                if(mas[i]!=mas[i-1])
                {
                    if(len_temp>len_max)
                    {
                        len_max=len_temp;
                        i_max=i_temp;
                    }
                    i_temp=i;
                    len_temp=1;
                }
                else
                    len_temp++;
            }
            if(len_temp>len_max)
            {
                len_max=len_temp;
                i_max=i_temp;
            }
            if(i_max!=i_t)
            {
                int temp=mas[i_max];
                for(i=i_max-i_t; i>0; i--)
                    mas[len_max-1+i_t+i]=mas[-1+i_t+i];
                for(i=0; i<len_max; i++)
                    mas[i_t+i]=temp;
            }
            i_t+=len_max;
        }
        for(i=0; i<N; i++)
            printf("%d ", mas[i]);      
        printf("\n"); 
        delete [] mas;
        return 0;
}
компилятор выдает кучу ошибок.

Добавлено через 2 минуты
Цитата Сообщение от Chelioss Посмотреть сообщение
Это алгорит сортировки по убыванию значений элементов простого массива.
Никаких дополнительных массивов не надо.

Исправил еще раз)
C++
1
2
3
4
5
6
7
8
for(int i=0; i<N;++i)
      for(int j=N-1; j>i-1; --j)
            if(mas[j]>mas[j-1])
                {
                   c=mas[j];
                   mas[j]=mas[j-1]
                   mas[j-1]=c;
                 }
объясняю как работает этот алгоритм:
допустим есть массив
0 1 2 3 4 5 - индексы
2 3 1 4 5 3 - сам массив
За первый цикл сравнятся элементы с индексами 4 и 5
т.к. 3<5, то ничего не делаем
Дальше сравниваем 3 и 4 элемент
5>4, значит меняем их местами
2 3 1 5 4 3 - в итоге
дальше сравниваем 2 и 3 элементы
5>1, значит меняем местами
2 3 5 1 4 3 - в итоге
и так далее. будет в итоге -
5 2 3 1 4 3
Что мы этим добились? Мы за один цикл for(int i=0; i<N;++i) с помощью работы цикла for(int j=N-1; j>i-1; --j) переместили максимальный элемент в левую часть массива
теперь рассмотрим второй цикл for(int i=0; i<N;++i), т.е. теперь i=1
если внимательно посмотреть на for(int j=N-1; j>i-1; --j), то увидим, что будет просматриваться не весь массив, а массив с конца до i включительно, т.е. мы первый элемент на данном этапе рассматривать не будем, т.к. в нем уже стоит макс. элемент.
с помощью цикла for(int j=N-1; j>i-1; --j)
мы 4 передвинем на i(итое) место, т.е.
было
5 2 3 1 4 3
стало
5 4 2 3 1 3
Дальше уже должно быть понятно, что при i=2 будет результат такой
5 4 3 2 3 1
дальше при i=3
5 4 3 3 2 1
при i=4
5 4 3 3 2 1
при i=5
5 4 3 3 2 1
конец
так сориторовать элементы, мне надо так. сть массив: 8 8 9 4 5 5 5 6 6 6 6
а отсоритровать егонужно вот так 6 6 6 6 5 5 5 8 8 9 4
то есть длины его идут в порядке убывания.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.01.2011, 12:26     pelles c Задан целочисленный массив размера N #16
компилятор выдает кучу ошибок.
Какие ошибки выдает?
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
19.01.2011, 12:28  [ТС]     pelles c Задан целочисленный массив размера N #17
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Какие ошибки выдает?
D:\progi for pelles\4-2-25\main.c(8): error #2048: Undeclared identifier 'new'.
D:\progi for pelles\4-2-25\main.c(8): error #2168: Operands of '=' have incompatible types 'int *' and 'int'.
D:\progi for pelles\4-2-25\main.c(8): error #2001: Syntax error: expected ';' but found 'int'.
D:\progi for pelles\4-2-25\main.c(8): error #2092: Missing identifier.
D:\progi for pelles\4-2-25\main.c(54): error #2048: Undeclared identifier 'delete'.
D:\progi for pelles\4-2-25\main.c(54): error #2039: Illegal expression.
D:\progi for pelles\4-2-25\main.c(54): error #2001: Syntax error: expected ']' but found 'mas'.
D:\progi for pelles\4-2-25\main.c(54): error #2144: Type error: pointer expected.
D:\progi for pelles\4-2-25\main.c(54): error #2001: Syntax error: expected ';' but found 'mas'.
D:\progi for pelles\4-2-25\main.c(54): warning #2114: Local 'delete' is not referenced.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.01.2011, 12:32     pelles c Задан целочисленный массив размера N #18
napalm2005, Тогда давайте по Вашему попробуем:
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
#include <stdio.h>
 
int main()
{
        int N, i, i_max, i_t=0, fl=1, len_temp, len_max, i_temp; 
        printf("N= ");
        scanf("%d", &N);
        int mas[N];
        for(i=0; i<N; i++)
        {
            printf("[%d]= ", i);
            scanf("%d", &mas[i]);
        }
        for(i=0; i<N; i++)
            printf("%d ", mas[i]);
        printf("\n");
        while(i_t<N)
        {
            len_temp=len_max=1;
            i_temp=i_max=i_t;
            for(i=i_t+1; i<N; i++)
            {
                if(mas[i]!=mas[i-1])
                {
                    if(len_temp>len_max)
                    {
                        len_max=len_temp;
                        i_max=i_temp;
                    }
                    i_temp=i;
                    len_temp=1;
                }
                else
                    len_temp++;
            }
            if(len_temp>len_max)
            {
                len_max=len_temp;
                i_max=i_temp;
            }
            if(i_max!=i_t)
            {
                int temp=mas[i_max];
                for(i=i_max-i_t; i>0; i--)
                    mas[len_max-1+i_t+i]=mas[-1+i_t+i];
                for(i=0; i<len_max; i++)
                    mas[i_t+i]=temp;
            }
            i_t+=len_max;
        }
        for(i=0; i<N; i++)
            printf("%d ", mas[i]);      
        printf("\n"); 
        return 0;
}
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
19.01.2011, 12:37  [ТС]     pelles c Задан целочисленный массив размера N #19
Цитата Сообщение от valeriikozlov Посмотреть сообщение
napalm2005, Тогда давайте по Вашему попробуем:
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
#include <stdio.h>
 
int main()
{
        int N, i, i_max, i_t=0, fl=1, len_temp, len_max, i_temp; 
        printf("N= ");
        scanf("%d", &N);
        int mas[N];
        for(i=0; i<N; i++)
        {
            printf("[%d]= ", i);
            scanf("%d", &mas[i]);
        }
        for(i=0; i<N; i++)
            printf("%d ", mas[i]);
        printf("\n");
        while(i_t<N)
        {
            len_temp=len_max=1;
            i_temp=i_max=i_t;
            for(i=i_t+1; i<N; i++)
            {
                if(mas[i]!=mas[i-1])
                {
                    if(len_temp>len_max)
                    {
                        len_max=len_temp;
                        i_max=i_temp;
                    }
                    i_temp=i;
                    len_temp=1;
                }
                else
                    len_temp++;
            }
            if(len_temp>len_max)
            {
                len_max=len_temp;
                i_max=i_temp;
            }
            if(i_max!=i_t)
            {
                int temp=mas[i_max];
                for(i=i_max-i_t; i>0; i--)
                    mas[len_max-1+i_t+i]=mas[-1+i_t+i];
                for(i=0; i<len_max; i++)
                    mas[i_t+i]=temp;
            }
            i_t+=len_max;
        }
        for(i=0; i<N; i++)
            printf("%d ", mas[i]);      
        printf("\n"); 
        return 0;
}
Все супер, только мало что понятно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2011, 12:45     pelles c Задан целочисленный массив размера N
Еще ссылки по теме:

C++ Целочисленный массив размера N: прибавить к четным числам последний элемент
Сформировать и вывести целочисленный массив размера N, содержащий степени двойки от 1 до N C++
C++ Дан целочисленный массив размера N. Найти максимальное количество его одинаковых элементов
Задан целочисленный массив размерности N C++
C++ Сформировать и вывести целочисленный массив размера N

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

Или воспользуйтесь поиском по форуму:
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
19.01.2011, 12:45     pelles c Задан целочисленный массив размера N #20
Отсортировать серии в массиве в порядке убывания их длины.
А где вы в моем алгоритме увидели длины? Я сделал убывание по значению, а вам надо лишь переделать убывание по серии, т.е. сравнивать не mas[i]>mas[i-1], а seria1(текущая)>seria2(серия перед текущей)
Yandex
Объявления
19.01.2011, 12:45     pelles c Задан целочисленный массив размера N
Ответ Создать тему
Опции темы

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