Задача про линию шариков (удаление со сдвигом 3х и более одинаковых подряд идущих) - Free Pascal

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

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

В одной компьютерной игре игрок выставляет в линию шарики разных цветов. Когда образуется непрерывная цепочка из трех и более шариков одного цвета, она удаляется из линии. Все шарики при этом сдвигаются друг к другу, и ситуация может повториться. Напишите программу, которая по данной ситуации определяет, сколько шариков будет сейчас уничтожено. Естественно, непрерывных цепочек из трех и более одноцветных шаров в начальный может быть не более одной. Формат входного файла Даны количество шариков в цепочке (не более 1000) и цвета шариков (от 0 до 9, каждому цвету соответствует свое целое число). Формат выходного файла Требуется вывести количество шариков, которое будет уничтожено. Пример: ввод: 10 3 3 2 1 1 1 2 2 3 3 вывод: 10

Решение задачи: «Задача про линию шариков (удаление со сдвигом 3х и более одинаковых подряд идущих)»

textual
Листинг программы
  1. program Project2;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils;
  7.  
  8. const nmax=1000;
  9. var a:array[1..nmax] of integer;
  10.     n,i,j,p,s,q,ud:integer;
  11.     f:boolean;
  12. begin
  13. ud:=0;
  14. readln(n);
  15. for i:=1 to n do readln(a[i]);
  16. writeln;
  17. f:=false;
  18. repeat
  19. i:=2;
  20. while i<=n do
  21. if a[i]=a[i-1] then
  22.  begin
  23.   j:=i;
  24.   s:=1;
  25.   p:=i-1;
  26.   while(j<=n) and(a[j]=a[j-1]) do
  27.    begin
  28.     s:=s+1;
  29.     j:=j+1;
  30.    end;
  31.   if s>2 then
  32.    begin
  33.     ud:=ud+s;
  34.     f:=true;
  35.     for j:=1 to s do
  36.      begin
  37.       for q:=p to n-1 do
  38.       a[q]:=a[q+1];
  39.       n:=n-1;
  40.      end
  41.    end
  42.   else i:=i+1;
  43.  end
  44. else i:=i+1;
  45. until(n<3)or not f;
  46. writeln(ud);
  47. readln
  48. end.

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

  1. В первой строке определяется тип программы как консольная и используемые библиотеки.
  2. Задается максимальное значение для переменной nmax, которая будет использоваться для определения размера массива.
  3. Создается массив a типа integer размером nmax.
  4. Определяются переменные n, i, j, p, s, q, ud и f типа integer.
  5. Переменная ud инициализируется значением 0.
  6. С помощью функции readln в цикл считывается количество шариков (значение переменной n) и заполняется массив a значениями, считанными в цикле.
  7. Выводится горизонтальная строка для разделения начального и конечного состояния массива.
  8. Инициализируется флаг f значением false.
  9. В повторяющемся цикле (пока n больше 2) выполняется следующая последовательность действий:
    • Переменная i устанавливается равной 2.
    • В цикле проверяется, являются ли три последовательных элемента массива одинаковыми.
    • Если это так, то выполняется следующая последовательность действий:
      • Переменная j устанавливается равной i.
      • Переменная s устанавливается равной 1.
      • Переменная p устанавливается равной i-1.
      • В цикле (пока j меньше n и a[j] равно a[j-1]) выполняется следующая последовательность действий:
        • Переменная s увеличивается на 1.
        • Переменная j увеличивается на 1.
      • Если s больше 2, то выполняется следующая последовательность действий:
        • Значение переменной s добавляется к переменной ud.
        • Флаг f устанавливается в true.
        • В цикле (для каждого шарика в удаляемой последовательности) выполняется следующая последовательность действий:
          • Переменная q устанавливается равной p.
          • Переменная n уменьшается на 1.
          • Значение a[q] присваивается значению a[q+1].
        • Переменная n уменьшается на 1.
      • Если s меньше или равно 2, то переменная i увеличивается на 1.
  10. После завершения цикла выводится значение переменной ud.
  11. Программа ожидает ввода данных с помощью функции readln.

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


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

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

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы