Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Щеблучеллооооо
0 / 0 / 0
Регистрация: 03.10.2017
Сообщений: 11
1

Найти серию подряд идущих элементов

06.10.2017, 09:50. Просмотров 571. Ответов 10
Метки нет (Все метки)

Дан целочисленный массив размером n. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии – количество этих элементов. Вывести на экран длины всех серий данного массива
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2017, 09:50
Ответы с готовыми решениями:

Заменить в строке каждую серию подряд идущих пробелов на один пробел
Заменить в строке каждую серию подряд идущих пробелов на один пробел.

Найти максимальную сумму подряд идущих N элементов массива
Необходимо вывести максимальную сумму подряд идущих элементов массива. Вводятся такие данные: 1)...

Найти максимальное число идущих подряд равных элементов последовательности
Дана последовательность натуральных чисел, завершающаяся числом 0. Определите, какое наибольшее...

Найти длину самой длиной последовательности подряд идущих элементов равных нулю
Задан числовой масив . Найти длину самой длиной последовательности подряд идущих элементов равных...

Найти в массиве последовательности из идущих подряд трех равных между собой элементов, и удалить два из них
Задача: Дан массив а1,...,а50. Найти в нем последовательности из идущие подряд трех равных между...

10
Байт
Эксперт C
20290 / 12854 / 2689
Регистрация: 24.12.2010
Сообщений: 26,851
06.10.2017, 10:07 2
C
1
2
3
4
5
6
7
8
for(i=0; i<n; ) {
  len=1;
  for(j=i+1; j<n; j++)
    if (m[j]==m[i])
       len++;
  printf("%d\n", len);  
  i += len;
}
Здесь серии длины 1 тоже выводятся. Если этого не надо, достаточно написать
C
1
2
if (len>1)
  printf("%d\n", len);
0
Catstail
Модератор
24270 / 12239 / 2206
Регистрация: 12.02.2012
Сообщений: 19,864
09.10.2017, 10:35 3
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
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
  
  int X[15]={1,2,2,2,3,4,4,4,4,1,2,3,3,3,3};
  int c,p,i,l;
  l=1;
  p=X[0];
  for (i=1; i<sizeof(X)/sizeof(int); i++)
  {
      c=X[i];
      if (c==p) 
         l++;
      else
      {
         if (l > 1) printf("%d\n",l);
         l=1;
      }       
      p=c;
  }    
  if (l > 1) printf("%d\n",l);
  
  system("PAUSE");  
  return 0;
}
Добавлено через 8 минут
Байт, эта задача должна иметь сложность O(n).
0
Байт
Эксперт C
20290 / 12854 / 2689
Регистрация: 24.12.2010
Сообщений: 26,851
09.10.2017, 16:53 4
Цитата Сообщение от Catstail Посмотреть сообщение
Байт, эта задача должна иметь сложность O(n).
А вы считаете, что у меня получится больше? Обратите внимание на строчку 7 -
C
1
i += len;
0
Catstail
Модератор
24270 / 12239 / 2206
Регистрация: 12.02.2012
Сообщений: 19,864
09.10.2017, 17:45 5
Цитата Сообщение от Байт Посмотреть сообщение
Обратите внимание на строчку 7 -
- обратил. Согласен с оценкой, но одобрить не могу: менять параметр цикла for в теле цикла - это нехорошая практика. "Вот за это функциональщики присвоения и не любят".
0
Байт
Эксперт C
20290 / 12854 / 2689
Регистрация: 24.12.2010
Сообщений: 26,851
09.10.2017, 17:56 6
Цитата Сообщение от Catstail Посмотреть сообщение
менять параметр цикла for в теле цикла - это нехорошая практика.
Мы для Фора, или Фор для нас?

Добавлено через 8 минут
Понимаете, я бы мог написать этот код вообще без for, скажем, через while. Но зачем? Меня в заголовке Фора устраивают первые 2 конструкции (начальная и проверяющая), а третья (переходные действия) мне здесь не нужна. Вот я и опускаю ее в заголовке, а эти действия беру на себя. Что здесь не камильфо? Может быть то, что клиенты с замыленными глазами не поймут? Так они всегда найдут, что не понять.
0
Catstail
Модератор
24270 / 12239 / 2206
Регистрация: 12.02.2012
Сообщений: 19,864
09.10.2017, 18:21 7
Цитата Сообщение от Байт Посмотреть сообщение
Мы для Фора, или Фор для нас?
- возвращаю Вам Ваше: "тут же дети". Так программировать нельзя. Код непрозрачен. Я, вот, не заметил... А задача-то элементарная и решается одним циклом без ухищрений. Слово "нельзя" у меня имеет смысл "крайне нежелательно".
0
Байт
Эксперт C
20290 / 12854 / 2689
Регистрация: 24.12.2010
Сообщений: 26,851
09.10.2017, 18:26 8
Catstail, сдаюсь! Но остаюсь при своем
1
Croessmah
09.10.2017, 21:27
  #9

Не по теме:

Цитата Сообщение от Байт Посмотреть сообщение
Но остаюсь при своем
Я согласен с Вами. :)

0
Байт
09.10.2017, 21:34
  #10

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Я согласен с Вами
Ветер воет, море злится,
Мы, корсары, не сдаем!
Мы спина к спине к спине у мачты,
Против тысячи - вдвоем
:)
....

0
Croessmah
++Ͻ
15221 / 8614 / 1637
Регистрация: 27.09.2012
Сообщений: 21,194
Записей в блоге: 2
Завершенные тесты: 1
09.10.2017, 21:52 11
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
//gcc 5.4.0
 
#include  <stdio.h>
 
 
int *skip_equals(int *begin, int *end)
{
    if (begin != end) {
        int val = *(begin++);
        while (begin != end && *begin == val) {
            ++begin;
        }
    }
    return begin;
}
 
void output_length_seqs(int *begin, size_t size)
{
    int *end = begin + size;
    while (begin != end) {
        int *end_cur_seq = skip_equals(begin, end);
        size_t length = end_cur_seq - begin;
        printf("%d - %zu\n", *begin, length);
        begin = end_cur_seq;
    }
}
 
 
int main(void)
{
    int array[] = {1, 5, 3, 4, 4, 5, 5, 5, 2, 2, 1, 1, 3};
    output_length_seqs(array, sizeof(array)/sizeof(*array));
    return 0;
}
http://rextester.com/UETXP74140
1
09.10.2017, 21:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2017, 21:52

Группу элементов с наибольшим числом подряд идущих отрицательных элементов переписать в «хвост» массива
В одномерном массиве A=(a1, а2, ..., аn) группу элементов, содержащую наибольшее число подряд...

Все группы элементов, содержащие более 3х подряд идущих отрицательных элементов, заменить на максимальный элемент
В одномерном массиве A=(a1, a2, ..., an) все группы элементов, содержащие более 3х подряд идущих...

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


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

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

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