Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 5.00
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
#1

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

17.01.2011, 14:42. Просмотров 1923. Ответов 23
Метки нет (Все метки)

Задан целочисленный массив размера N. Отсортировать серии в массиве в порядке убывания их длины.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2011, 14:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос pelles c Задан целочисленный массив размера N (C++):

Задан вещественный массив размера N pelles c - C++
Задан вещественный массив размера N. Найти сумму второго максимума и третьего минимума массива. Все элементы, расположенные между ними,...

Задан вещественный массив размера N. Создать целочисленный массив такого же размера, в котором будут записаны индексы исходного массива в порядке во - C++
Помогите с задачей: Задан вещественный массив размера N. Создать целочисленный массив такого же размера, в котором будут записаны...

Задан целочисленный массив размера N. Отсортировать серии в массиве в порядке убывания их длины - C++
В общем, есть две задачи, ух на какую же веселую и ни черта не понятную для меня тему. 1. Задан целочисленный массив размера N....

Задан целочисленный массив размерности N - C++
//Задан целочисленный массив размерности N.Есть ли среди элементов массива простые числа ? Если да, то вывести номера этих элементов. ...

Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент - C++
1. Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент. (Серия - группа подряд идущих...

Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент - C++
Помогите преобразовать код из языка С# в С++. Занимался разбором задачи на языке С++. Вот условие задачи: Дан целочисленный массив...

23
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
17.01.2011, 21:42 #2
napalm2005, Если бы объяснили бы что подрузамеваете по сериями, то цены бы Вам не было. Серии бывают:
- серия из одинаковых значений
- серия из значений упорядоченных по убыванию
- серия из значений упорядоченных по возрастанию
- серия из двузначных цифр
- серия из положительных элементов
- серия из простых чисел
и еще много много можно додумать.....
0
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
17.01.2011, 23:19  [ТС] #3
Цитата Сообщение от valeriikozlov Посмотреть сообщение
napalm2005, Если бы объяснили бы что подрузамеваете по сериями, то цены бы Вам не было. Серии бывают:
- серия из одинаковых значений
- серия из значений упорядоченных по убыванию
- серия из значений упорядоченных по возрастанию
- серия из двузначных цифр
- серия из положительных элементов
- серия из простых чисел
и еще много много можно додумать.....
Серия – последовательность одинаковых элементов в массиве
0
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
19.01.2011, 02:30  [ТС] #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;
}
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
19.01.2011, 03:27 #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;
                 }
0
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
19.01.2011, 03:31  [ТС] #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;
                 }
нет, мне нужновсе серии отсортировать в порядке возрастания.
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
19.01.2011, 03:32 #7
В том моем сообщении, кроме первого предложения, есть еще и второе, и даже третье! Это алгоритм сортировки! И еще, по условию надо по убыванию, а не по возрастанию.
0
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
19.01.2011, 03:39  [ТС] #8
Цитата Сообщение от Chelioss Посмотреть сообщение
В том моем сообщении, кроме первого предложения, есть еще и второе, и даже третье! Это алгоритм сортировки! И еще, по условию надо по убыванию, а не по возрастанию.
i<0 с условием того, что N строго положительное число.
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
19.01.2011, 03:42 #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;
                 }
0
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
19.01.2011, 03:50  [ТС] #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;
                 }
еще раз говорю, мне не нужна сортировка элементов, ее я могу получить без вопросов. А по поводу итых и джитых серий, я ее даже получить не могу. Я не знаю сколько серий между первой и последней.
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
19.01.2011, 03:56 #11
Если делать с помощью моего алгоритма, то просто находите последнюю серию, потом предпоследнюю, потом сравниваете их длины. При всем этот нужны переменные, в которых будут хранится начало и конец серии, для того, чтобы поменять местами серии.
0
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
19.01.2011, 10:46  [ТС] #12
Цитата Сообщение от Chelioss Посмотреть сообщение
Если делать с помощью моего алгоритма, то просто находите последнюю серию, потом предпоследнюю, потом сравниваете их длины. При всем этот нужны переменные, в которых будут хранится начало и конец серии, для того, чтобы поменять местами серии.
так в данном случае i И j это что вообще, это длины серий, конечные индексы серий, что это такое?

Добавлено через 8 минут
И еще одно, если речь идетодополнительном массиве, то в этой здаче его задествовать нельзя.
0
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.01.2011, 12:10 #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;
}
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
19.01.2011, 12:12 #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
конец
0
napalm2005
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 40
19.01.2011, 12:17  [ТС] #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
то есть длины его идут в порядке убывания.
0
19.01.2011, 12:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2011, 12:17
Привет! Вот еще темы с ответами:

Дан целочисленный массив размера N. - C++
Дан целочисленный массив размера N. Найти максимальное кол-во его одинаковых элементов. Помогите пожалуйста, а то разобраться не могу. Вот...

Дан целочисленный массив размера N - C++
Дан целочисленный массив размера N. Вывести вначале все содержащиеся в данном массиве четные числа в порядке возрастания их индексов, а...

Дан целочисленный массив размера N. Сжать массив, удалив из него все элементы, модуль которых не превышает 1 - C++
Помогите пожалуйста написать программу: Дан целочисленный массив размера N. Сжать массив, удалив из него все элементы, модуль которых не...

Дан целочисленный массив размера N. Сжать массив, удалив из него все элементы, модуль которых не превышает 1 - C++
Помогите пожалуйста написать программу. Дан целочисленный массив размера N. Сжать массив, удалив из него все элементы, модуль которых не...


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

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

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