Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2011, 20:33   #1
Nikita++
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 80
Радость Интересная игра. Delphi.

Привет!!!

Задача такова:

В одной компьютерной игре игрок выставляет в линию шарики разных цветов. Когда образуется непрерывная цепочка из трех и более шариков одного цвета, она удаляется из линии. Все шарики при этом сдвигаются друг к другу, и ситуация может повториться.

Напишите программу, которая по данной ситуации определяет, сколько шариков будет сейчас уничтожено. Естественно, непрерывных цепочек из трех и более одноцветных шаров в начальный может быть не более одной.

Не могу понять в чем проблема( wrong answer на 3 тесте).


Код:
program Sphere;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
   a:array[1..1000]of integer;
   b:boolean;
   i,n,s,t,j,m,l:integer;

procedure delete(x,y:integer);
var
   j:integer;
begin
   dec(n,y);
   x:=x-y;
   for j:=x to n do a[j]:=a[j+y];
end;

begin
   read(n);
   s:=0;b:=false;
   for i:=1 to n do read(a[i]);
   readln;
   t:=1;m:=10;
   for i:=1 to n do
      begin
         if(a[i]=m)then inc(t)
         else
            begin
               t:=1;m:=a[i];
            end;
         l:=i-1;
         if(t=3)then
            begin
               j:=i+1;
               while(a[j]=m)do
                  begin
                     inc(j);
                     inc(t);
                  end;
               delete(j,t);
               inc(s,t);
               break;
            end;
         if(i=n)then b:=true;
      end;
   dec(l);
   if((l=n)or(l=0)or(n=0))then b:=true;
   if(b=false)then
     begin
        repeat
           i:=l-1;j:=l+1;t:=1;m:=a[l];
           while((a[i]=m)and(i>0))do
              begin
                 dec(i);
                 inc(t);
              end;
           while((a[j]=m)and(j<=n))do
              begin
                 inc(j);
                 inc(t);
              end;
           l:=i;
           delete(j,t);
           if(t>=3)then inc(s,t);
        until ((t<3)or(l=n)or(l=0)or(n=0));
     end;
   writeln(s);
   readln;
end.

Можете написать свою программу или исправить мою(а то длинновато)?
Проверять по адресу http://informatics.mccme.ru/moodle/m...hapterid=1461#.

Заранее спасибо.
Nikita++ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Надо написать прогу в Delphi. Прога интересная и для меня сложная. Nekitos Помощь студентам 2 16.01.2011 15:25
Интересная задача про нейронную сеть Delphi el_pluto Помощь студентам 2 12.12.2010 18:03
Есть интересная задачка по Delphi!! Кто сможет решить? St1mkA Помощь студентам 2 04.10.2009 19:00
Игра на Delphi Pirotexnik Общие вопросы Delphi 10 12.07.2009 20:27