Определить периодичность последовательности - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите написать программу по такому условию на Си. Заранее спасибо. Массив A(M) заполнен только нулями и единицами. Определите, будет ли полученная последовательность периодической и, если да, то найдите длину наименьшего периода. В конце массива «неполный» период невозможен. Тест. 1; 0; 0; 0; 1; 0; 0; 0; 1; 0; 0; 0. Результат. Последовательность периодическая. Т=4. Формат входных данных. [M] [1-й элемент массива A] [2-й элемент массива A] и т.д. Элементы массива – целые числа в диапазоне [0, 1]. M - целое число в диапазоне [2, 20]. Формат выходных данных. [количество элементов в наименьшем периоде]. Если последовательность непериодическая, то возвращается 0. Рекомендуемое кол-во циклических операторов (без ввода и вывода данных): 3 (2?) С уважением.

Решение задачи: «Определить периодичность последовательности»

textual
Листинг программы
period(int* seq, int len)
{
    int i, k;
    for (k = 1; k <= len / 2; k++)
        if (len % k == 0)
        {
            for (i = k; i < len; i++)
                if (seq[i] != seq[i%k])
                    break;
            if (i == len)
                return k;
        }
    return 0;
}

Объяснение кода листинга программы

В данном коде определена функция period, которая принимает два аргумента: seq (указатель на начало последовательности чисел) и len (длина последовательности).

  1. Создаются две переменные: i (номер текущего элемента последовательности) и k (номер проверяемого периода).
  2. Запускается цикл, который будет выполняться до тех пор, пока k меньше или равно len / 2.
  3. Внутри цикла проверяется, делится ли длина последовательности на k без остатка (это может говорить о периодичности).
  4. Если условие выполняется, то начинается второй цикл, который будет проверять все элементы последовательности, начиная с k-го, на предмет того, совпадают ли они (это может говорить о периодичности).
  5. Если все элементы совпадают, то возвращается k.
  6. Если в процессе проверки встречается элемент, который не совпадает с предыдущими k-ыми элементами, то цикл прерывается и функция продолжает поиск периодичности с нового значения k.
  7. Если циклы завершились без обнаружения периодичности, то возвращается 0. Пример вызова функции: int seq[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; int len = sizeof(seq) / sizeof(seq[0]); int period = period(seq, len); if (period != 0) { printf(Периодичность последовательности: %d\n, period); } else { printf(Периодичность последовательности не обнаружена\n); }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5
Похожие ответы