Поле Чудес - найти минимальное число секторов, которое может быть на барабане - Free Pascal

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

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

Привет форуму, у меня вот такая "весёлая" проблемка... Есть задача:

Поле чудес

Для игры в «Поле чудес» используется круглый барабан, разделенный на сектора, и стрелка. В каждом секторе записано некоторое число. В различных секторах может быть записано одно и то же число. Однажды ведущий игры решил изменить правила. Он сам стал вращать барабан и называть игроку (который барабана не видел) все числа подряд в том порядке, в котором на них указывала стрелка в процессе вращения барабана. Получилось так, что барабан сделал целое число оборотов, то есть последний сектор совпал с первым. После этого, ведущий задал участнику вопрос: какое наименьшее число секторов может быть на барабане? Требуется написать программу, отвечающую на этот вопрос ведущего.

Входные данные:

В первой строке входного файла INPUT.TXT записано число N – количество чисел, которое назвал ведущий (2 ≤ N ≤ 30000). Во второй строке записано N чисел, на которые указывала стрелка в процессе вращения барабана. Первое число всегда совпадает с последним (в конце стрелка указывает на тот же сектор, что и в начале). Числа, записанные в секторах барабана – натуральные, не превышающие 32000.

Выходные данные:

В выходной файл OUTPUT.TXT необходимо вывести одно число – минимальное число секторов, которое может быть на барабане.

Примеры

------------------------------------------------------------------------------------------------------------------------------------------
INPUT.TXT
------------------------------------------------------------------------------------------------------------------------------------------
1) 13 5 3 1 3 5 2 5 3 1 3 5 2 5
------------------------------------------------------------------------------------------------------------------------------------------
2) 4 1 1 1 1
------------------------------------------------------------------------------------------------------------------------------------------
3) 4 1 2 3 1
------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------
OUTPUT.TXT
------------------------------------------------------------------------------------------------------------------------------------------ 1) 6 ------------------------------------------------------------------------------------------------------------------------------------------ 2) 1 ------------------------------------------------------------------------------------------------------------------------------------------ 3) 3 ------------------------------------------------------------------------------------------------------------------------------------------
И вот вообще не пойму алгоритма... Кто может, пожалуйста, подскажите!

Заранее спасибо!

Решение задачи: «Поле Чудес - найти минимальное число секторов, которое может быть на барабане»

textual
Листинг программы
var
  i,j,n:integer;
  a:array[0..30000] of integer;
begin
  read(n);
  for i:=0 to n-1 do read(a[i]);
  n:=n-1;
  for i:=1 to n-1 do if n mod i=0 then begin
    j:=0;
    while (a[j mod i]=a[j]) and (j<n) do j:=j+1;
    if j=n then begin n:=i; break end
  end;
  write(n)
end.

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


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

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

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