Прошу помоч решить задачу : Быстрый Фил. Фил работает работает в последнюю смену.После работы ровно в 2-00 утра Фил уезжает домой с автомобильной стоянки.Его маршрут пролегает по дороге,на которой установлены один или несколько светофоров.Фил всегда удивлялся,что,выбирая определенную скорость движения по маршруту и не изменяя ее ,он мог иногда доехать к дому без задержки на светофорах,т.е. все светафоры он проезжает на зеленый свет.Скорость движения в городской черте не должна превосходить 60 миль/час.Однако Фил не любил и тихо ездить. Минимальная скорость его движения 30 миль/час.Составьте алгоритм-программу,которая находит все целочимленные скорости(в милях/час),с которыми Фил может двигаться домой без остановки на светофорах,начало движения с автомобильной стоянки ровно в 2-00 утра.В этот момент времени все светофоры сбрасываются в зеленый свет. Исходные данные задаются в текст. файле,в котором приводится набор данных для описания режимов работы светофоров.Последнее число в файле(-1),является признаком конца данных в файле.Первое число n каждого набора чисел : Length-GreenYellowRed (LGYR) для каждого светофора, где L-положительное действительное число,указывающее место расположения светофора от начала маршрута Фила; G,Y,R - интервал продолжительности времени в секундах непрерывного цвета светофора зеленого,желтого,красного.Результаты расчетов допустимых целочисленных скоростей движения Фила сохранить в выходном файле:
Файл исходных данных: 1 5.5 40 8 25
Файл выходных данных : 30,32,33,36,37,38,41,42,43,44,45,48,49,5051,52,53,54,59,60
Файл выходных данных : Должно получится 0 - признак отсутствия такой скорости
Дело в том что мне нужно два алгоритма на эту задачу , один я сделал , а вот до другого не могу додуматься , вот вас решил спросить . Задача в принципе легкая , но загвозка в том что мне нужен еще один алгоритм на эту задачу. :low:
klem4
30.05.2005 12:11
Цитата
один я сделал , а вот до другого не могу додуматься , вот вас решил спросить . Задача в принципе легкая , но загвозка в том что мне нужен еще один алгоритм на эту задачу.
а ты не боишься, что даже если кто-нибудь решит эту задачу, то решение будет совпадать с твоим ;)?
ты бы показал свой вариант. :yes:
Guilty
30.05.2005 18:15
Вот мой вариант (тока немного trunc глючит , но это попровимо) :
begin clrscr; assign(f1,'next1.txt'); assign(f2,'next2.txt'); reset(f1); rewrite(f2); readln(f1,n); for i:=1 to n do begin for j:=1 to 4 do begin read(f1,k); case j of 1: length[i]:=k; 2: Green[i]:=k; 3: Yellow[i]:=k; 4: Red[i]:=k; end; end; readln(f1); end; q:=30; l:=0; while q<=60 do begin Sens:=True; for i:=1 to n do if Sens=True then begin Time:=trunc(Length[i]/(k*1000)*3600); Time:=Time mod trunc(Green[i]+Red[i]+Yellow[i]); if (Time>=0)and(Time<=10) then begin inc(l); Speed[l]:=q; Sens:=False; end; end; inc(q); end; for i:=1 to l do write(Speed[i]:4 :0); readkey; end.
novaa
31.03.2010 12:31
прошу помочь в решении данной задачи , потому что представленных выше код, не работает как надо
TarasBer
31.03.2010 14:35
А в чём смысл жёлтого сигнала в этой задаче? И где задаётся фаза светофора?
Lapp
31.03.2010 15:45
Фаза задается тут:
Цитата(Guilty @ 30.05.2005 4:41)
... ровно в 2-00 утра.В этот момент времени все светофоры сбрасываются в зеленый свет.
Смысл желтого, думаю - запутать решающего )). Или по-возможности приблизить ситуацию к реальности..
novaa
31.03.2010 17:02
Цитата(Lapp @ 31.03.2010 12:45)
Фаза задается тут:
Смысл желтого, думаю - запутать решающего )). Или по-возможности приблизить ситуацию к реальности..
именно так приблизить ситуацию к реальной .
novaa
31.03.2010 21:57
аааааа хелп ми плиз
Lapp
1.04.2010 7:14
Цитата(novaa @ 31.03.2010 8:31)
представленных выше код, не работает как надо
А что это значит? Как тебе надо?
Вот мой вариант. Его результат на приведенном примере такой же, как у кода выше (то есть не такой, как в ответе примера).
const m=100;
var f: text; i,n,v: integer; y,r,t: double; l,g,c: array [1..m] of double; Yes: boolean; Comma: string[1];
begin Assign(f,'in.txt'); ReSet(f); ReadLn(f,n); for i:=1 to n do begin ReadLn(f,l[i],g[i],y,r); c[i]:=g[i]+y+r end; Close(f); Comma:=''; Assign(f,'out.txt'); ReWrite(f); for v:=30 to 60 do begin Yes:=true; i:=0; while Yes and (i<n) do begin Inc(i); t:=l[i]/v*3600; Yes:=Yes and (t-Trunc(t/c[i])*c[i]<=g[i]) end; if Yes then begin Write(f,Comma,v); Comma:=',' end end; if Length(Comma)=0 then Write(f,0); Close(f) end.
novaa
1.04.2010 9:37
Цитата(Lapp @ 1.04.2010 4:14)
А что это значит? Как тебе надо?
Вот мой вариант. Его результат на приведенном примере такой же, как у кода выше (то есть не такой, как в ответе примера).
const m=100;
var f: text; i,n,v: integer; y,r,t: double; l,g,c: array [1..m] of double; Yes: boolean; Comma: string[1];
begin Assign(f,'in.txt'); ReSet(f); ReadLn(f,n); for i:=1 to n do begin ReadLn(f,l[i],g[i],y,r); c[i]:=g[i]+y+r end; Close(f); Comma:=''; Assign(f,'out.txt'); ReWrite(f); for v:=30 to 60 do begin Yes:=true; i:=0; while Yes and (i<n) do begin Inc(i); t:=l[i]/v*3600; Yes:=Yes and (t-Trunc(t/c[i])*c[i]<=g[i]) end; if Yes then begin Write(f,Comma,v); Comma:=',' end end; if Length(Comma)=0 then Write(f,0); Close(f) end.
Там он не выводил те значения которые должны выводится. в обоих случаях он выводил значения от 30 до 60.
АААааааа большое спасибо , работает как надо очень благодарен!
Lapp
1.04.2010 13:33
Цитата(novaa @ 1.04.2010 6:37)
Там он не выводил те значения которые должны выводится. в обоих случаях он выводил значения от 30 до 60.
Да, похоже на то... видимо, я невнимательно посмотрел в первый раз. Мой вариант не выводит все числа из примера - например, 41. Похоже, в примере ошибка. Наверное, его набирали вручную (об этом говорит пропущенная запятая), так что ошибки могли быть.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.