IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Задача.Быстрый Фил, Нужен второй алгоритм
Guilty
сообщение 30.05.2005 4:41
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Прошу помоч решить задачу :
Быстрый Фил. Фил работает работает в последнюю смену.После работы ровно в 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


Файл исходных данных:
3
10.7 10 2 75
12.5 12 5 57
17.93 15 4 67
-1

Файл выходных данных : Должно получится 0 - признак отсутствия такой скорости


Дело в том что мне нужно два алгоритма на эту задачу , один я сделал , а вот до другого не могу додуматься , вот вас решил спросить . Задача в принципе легкая , но загвозка в том что мне нужен еще один алгоритм на эту задачу.
:low:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 30.05.2005 8:11
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
один я сделал , а вот до другого не могу додуматься , вот вас решил спросить . Задача в принципе легкая , но загвозка в том что мне нужен еще один алгоритм на эту задачу.

а ты не боишься, что даже если кто-нибудь решит эту задачу, то решение будет совпадать с твоим ;)?

ты бы показал свой вариант. :yes:

Сообщение отредактировано: klem4 - 30.05.2005 8:12


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Guilty
сообщение 30.05.2005 14:15
Сообщение #3





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Вот мой вариант (тока немного trunc глючит , но это попровимо) :
uses crt;
var
i,j,n,l,q,Time:integer;
Green,Red,Yellow,Speed,Length:array[1..100]of real;
s:string;
k:real;
c:char;
f1,f2:TEXT;
Sens:boolean;


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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
novaa
сообщение 31.03.2010 8:31
Сообщение #4





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Артем

Репутация: -  0  +


прошу помочь в решении данной задачи !mol1.gif , потому что представленных выше код, не работает как надо
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 31.03.2010 10:35
Сообщение #5


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


А в чём смысл жёлтого сигнала в этой задаче? И где задаётся фаза светофора?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 31.03.2010 11:45
Сообщение #6


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Фаза задается тут:
Цитата(Guilty @ 30.05.2005 4:41) *
... ровно в 2-00 утра.В этот момент времени все светофоры сбрасываются в зеленый свет.

Смысл желтого, думаю - запутать решающего )). Или по-возможности приблизить ситуацию к реальности..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
novaa
сообщение 31.03.2010 13:02
Сообщение #7





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Артем

Репутация: -  0  +


Цитата(Lapp @ 31.03.2010 12:45) *

Фаза задается тут:

Смысл желтого, думаю - запутать решающего )). Или по-возможности приблизить ситуацию к реальности..


именно так smile.gif приблизить ситуацию к реальной .
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
novaa
сообщение 31.03.2010 17:57
Сообщение #8





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Артем

Репутация: -  0  +


аааааа хелп ми плиз cray.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 1.04.2010 3:14
Сообщение #9


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(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.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
novaa
сообщение 1.04.2010 5:37
Сообщение #10





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Артем

Репутация: -  0  +


Цитата(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.

АААааааа большое спасибо , работает как надо smile.gif очень благодарен!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 1.04.2010 9:33
Сообщение #11


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(novaa @ 1.04.2010 6:37) *
Там он не выводил те значения которые должны выводится. в обоих случаях он выводил значения от 30 до 60.
Да, похоже на то... видимо, я невнимательно посмотрел в первый раз.
Мой вариант не выводит все числа из примера - например, 41. Похоже, в примере ошибка. Наверное, его набирали вручную (об этом говорит пропущенная запятая), так что ошибки могли быть.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.07.2025 9:48
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"