Важно:Сразу прошу вас не пишите готовую программу ,а только объясните сам алгоритм в кратце: Это задача с онлайн олимпиады:http://www.hsin.hr/coci/ Даётся нынешнее время и время планировки,нужно сколько осталось(таймер своего рода). Пример: input 20:00:00 04:00:00 output 08:00:00
input 12:34:56 14:36:22 output 02:01:26
Не могу понять алгоритм,ну никак?
П.С:Вольво сразу предупреди если я что-то не то сделал,может не учёл правила
volvo
17.02.2007 23:09
Переводи стартовое и финальное время в секунды, отнимай одно от другого, и результат - опять в часы:минуты:секунды...
Возможен один исключительный случай - если результат будет отрицательным. Сам догадаешься, что надо сделать в этом случае?
Perfez
17.02.2007 23:13
Цитата
Переводи стартовое и финальное время в секунды, отнимай одно от другого, и результат - опять в часы:минуты:секунды...
Спасибо,но я об этом ,знал. Только не говори что если знал почему не сказалюЯ именно и на это зацикливаюсь:Вот например с этим примером:
Цитата
input 20:00:00 04:00:00 output 08:00:00
???
volvo
17.02.2007 23:14
Я тебе сказал, что есть исключительный случай? Вот он... Тебе надо догадаться, что делать...
мисс_граффити
17.02.2007 23:19
нюанс, который не совсем понятен по условию: ограничения. максимальное оставшееся время - сутки? или сколько? дата же не задана...
Perfez
17.02.2007 23:19
(20:00:00-04:00:00)+((24:00:00-20:00:00)/2) Может это???
Добавлено через 1 мин.
Цитата
The first line of input contains the current time in hh:mm:ss format (hours, minutes, seconds). The hours will be between 0 and 23 (inclusive) and the minutes and seconds between 0 and 59. The second line contains the time of the explosion in the same format.
Нужен ли перевод?
мисс_граффити
17.02.2007 23:21
зачем такие сложности?! подумай, в каком случае время будет отрицательным... сразу станет понятно, что надо сделать
ага, нашла:
Цитата
The time Borko wants is at least one second and at most 24 hours
Perfez
17.02.2007 23:25
ну,незнаю...когда есть дело АМ и РМ?То есть если стрелка перейдёт 12...
Добавлено через 58 сек. Что нашла?
мисс_граффити
17.02.2007 23:26
AM -> PM у тебя отслеживается: 11:00 -> 13.00 разница, как видишь, положительна.
про ограничения. вот это:
Цитата
максимальное оставшееся время - сутки? или сколько? дата же не задана...
Perfez
17.02.2007 23:27
прибавлю к получившемуся отрицательному 24:00:00???
мисс_граффити
17.02.2007 23:29
Да. Смотри: когда происходит переход на новые сутки, мы считаем, сколько осталось старых суток и сколько возьмется от новых, т.е.: (24:00-20:00)+04:00=(04:00-20:00)+24:00
Perfez
17.02.2007 23:31
урррррррррррраааааааааа!спасибо
Добавлено через 15 мин. В чём проблема?
type
time=array [1..3] of byte;
var
a,b:time;
c,d:string[8];
e,f:int64;
Procedure Strong(var c:string[8]; var a:time);
var
x:byte;
y:integer;
BeginFor x:=1to2doBegin
Val(Copy(c,1,Pos(':',c)-1),a[x],y);
Delete(c,1,Pos(':',c));
End;
Val(c,a[3],y);
End;
Begin
ReadLn(c);
Strong(c,a);
ReadLn(d);
Strong(d,b);
If c=d then WriteLn('00:00:00');
e:=(b[1]*3600+b[2]*60+b[3])-(a[1]*3600+a[2]*60+a[3]);
If (a[1]>=b[1]) and (a[2]>=b[2]) and (a[3]>a[3]) then e:=e+24*3600;
Write(e div3600,':');
e:=e mod3600;
Write(e div60,':');
Write(e mod60);
End.
Добавлено через 14 мин. Может проверите?.Всё готово:
type
time=array [1..3] of byte;
var
a,b:time;
c,d:string[8];
e,f:int64;
Procedure Strong(var c:string[8]; var a:time);
var
x:byte;
y:integer;
BeginFor x:=1to2doBegin
Val(Copy(c,1,Pos(':',c)-1),a[x],y);
Delete(c,1,Pos(':',c));
End;
Val(c,a[3],y);
End;
Begin
ReadLn(c);
Strong(c,a);
ReadLn(d);
Strong(d,b);
e:=(b[1]*3600+b[2]*60+b[3])-(a[1]*3600+a[2]*60+a[3]);
If (a[1]>=b[1]) and (a[2]>=b[2]) and (a[3]>=b[3]) then e:=e+24*3600;
If e div3600<10then Write('0',e div3600,':')
else Write(e div3600,':');
e:=e mod3600;
If e div60<10then Write('0',e div60,':')
else Write(e div60,':');
If e mod60<10then Write('0',e mod60)
else Write(e mod60);
End.
Добавлено через 2 мин. Не нужно проверять он прошёл все тесты=по-моему...
volvo
18.02.2007 0:10
Цитата
В чём проблема?
Какая из них? У тебя в программе НЕ одна проблема... Первая из них: ты уверен, что в FPC индексация строк начинается с 1?
Добавлено через 1 мин. P.S. Это же самое делается в 3 строки (с использованием такого мощного компилятора - тем более) ...
Perfez
18.02.2007 0:14
Как?
Perfez
18.02.2007 0:37
Обо что споткнулся я?
volvo
18.02.2007 1:14
Цитата
Обо что споткнулся я?
Вот об это:
If (a[1]>=b[1]) and (a[2]>=b[2]) and (a[3]>=b[3]) then e:=e+24*3600;
А если так: с = '20:00:00' и d = '04:10:10', то что ты получишь в результате, подумай...
Perfez
18.02.2007 1:21
.
volvo
18.02.2007 1:45
Я ж показал тебе: условие не выполняется, а увеличивать E все равно надо... Ответы читай внимательно, все равно готового решения не будет...