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

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

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

 
 Ответить  Открыть новую тему 
> Автомобиль на круговой дороге
Kolyancz
сообщение 15.12.2008 19:18
Сообщение #1


Новичок
*

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

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


Представьте себе круговую трассу, на которой на произвольном расстоянии размещены заправки, каждая с определенным объемом бензина. Кол-во бензина на всех заправках равно длине дороги. Ваш автомобиль потребляет 100 литров на 100 км и имеет неограниченный бензобак. Вопрос: в какой точке автомобиль должен начать движение, что бы у него никогда не кончался бензин во время поездки?
Дано: 2 массива, 1-ый с объемами бензина на заправках с направлении хода часов, 2-ой с расстояниями между заправками.
Как заставить два массива сравниваться подобным образом?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.12.2008 19:28
Сообщение #2


Гость






Цитата
Вопрос: в какой точке автомобиль должен начать движение, что бы у него никогда не кончался бензин во время поездки?
Ответ: в любой. Потому как
Цитата
автомобиль потребляет 100 литров на 100 км и имеет неограниченный бензобак
С чего бы в неограниченном бензобаке кончился бензин?

А если серьезно - ты бы условие перепроверил, что-то не очень связывается. Например,
Цитата
Кол-во бензина на всех заправках равно длине дороги
blink.gif Я уж не говорю о том, что бензин мерить километрами - как то непривычно, вопрос вообще в другом: заправился автомобиль, слил весь бензин, это значит, что больше он на эту заправку приехать не может, или бензин как-то восстанавливается на заправке? Сколько кругов автомобиль должен намотать по трассе? Сколько у него в неограниченном бензобаке есть бензина в начале пути (а то ведь можно и до первой заправки не доехать, если бензина нет изначально)?
 К началу страницы 
+ Ответить 
Kolyancz
сообщение 16.12.2008 14:23
Сообщение #3


Новичок
*

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

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


Да, условие сложно описать, проще, конечно нарисовать. Когда, я писал о том, что кол-во литров ровнокилометрам, я имел ввиду номинал. 23 литра-23километра. Неограниченый бак вовсе не значит полный бак, это второстепенное условие, типа на всякий случай.
Вот напимер:
На круговой дороге стоят 5 заправок:
Первый массив показывает кол-во литров бензина на этих заправках: 4 7 5 3 4
Второй массив показывает кол-во километров между ними: 7 6 2 3 5
Видно, что всю дорогу можно проехать только лишь тогда, когда начнешь свой путь со второй заправки, т.е.
начинаем на заправке номер два: налили 7 литров проехали 6 километров, остался 1 литр, налили еще 5, проехали 2 км, осталось 4 литра, налили еще 3, проехали 3 км, осталось 4 литра, налили еще 4 литра, проехали 5 км, осталось 3 литра, налили еще 4, проехали 7 км, вот и на той заправки, на которой начали.
Круг один, нужно найти способ проехать круг так, что бы бензин не кончился по пути.

Сообщение отредактировано: Kolyancz - 16.12.2008 14:25
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 17.12.2008 5:44
Сообщение #4


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

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

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


Цитата(Kolyancz @ 15.12.2008 19:18) *
в какой точке автомобиль должен начать движение, что бы у него никогда не кончался бензин во время поездки?
Забавная задачка smile.gif. Как я понимаю, исходная точка должна найтись обязательно. Возможно, она не одна, но мой код находит только первую.

Цитата(Kolyancz @ 15.12.2008 19:18) *
Как заставить два массива сравниваться подобным образом?
Сначала я сделал вторым способом, но разброс во втором массиве получился низкий. Тогда я сделал первый способ. Он значительно улучшил ситуацию, но совсем честным будет только продолжение первого цикла первого способа до достижения t=0.

const
m=20;

var
Gas,Way: array[1..m]of integer;
Start,Tank,t,i: integer;

begin
{ Заполнение массивов }
Randomize;
t:=0;
{ первый способ}
for i:=1 to m do begin
Gas[i]:=Random(m)+1;
Way[i]:=Random(m)+1;
t:=t+Gas[i]-Way[i];
end;
for i:=1 to Abs(t) do Inc(Way[Random(m)+1],t div Abs(t));

{ второй способ }
{for i:=1 to m do begin
Gas[i]:=Random(m)+1;
t:=t+Gas[i];
Way[i]:=0
end;
for i:=1 to t do Inc(Way[Random(m)+1]);}

for i:=1 to m do WriteLn('Pump:',i:3,' Gas:',Gas[i]:3,' Way:',Way[i]:3);

{ Езда }
Start:=0;
repeat
Inc(Start);
Tank:=0;
i:=Start;
while Tank>=0 do begin
Tank:=Tank+Gas[i]-Way[i];
i:=i mod m+1;
if i=Start then break
end;
until Tank=0;
WriteLn('start at pump ',Start);
ReadLn
end.


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


Новичок
*

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

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


Lapp, ты действительно гений. Очень красиво решил. Спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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