Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Новички в программировании > Паскаль
Регистрация

Восстановить пароль
Повторная активизация e-mail



Ответ
 
Опции темы
Старый 06.01.2017, 02:11   #1
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 157
Репутация: 75
По умолчанию скорость движения с зонтиком и без зонтика

Здравия, нужна помощь в такой задаче
Дано число n.
В следующей строке n чисел. (время, за которое каждый пройдет с первой точки во вторую)
Есть две точки, и n человек. Идет дождь, все должны перебраться с первой точки до второй. Зонтиком может пользоваться два человека сразу. Нужно найти минимальное время, за которое все окажутся во второй точке.
Если идут два человека под зонтиком, со со скоростью более медленного.
То есть, берем самого быстрого, и он всех водит с первого пункта во второй. Код нерабочий(плохо рабочий - нерабочий), в чем проблема?
Код:

var
a:array [1..1000] of integer;
n,i,min,kolvo,ch:integer;
fi,fo:text;
begin
Assign(fi,'umbrella.in');
Assign(fo,'umbrella.out');
Reset(fi);
Rewrite(fo);
Read(fi,n);
Readln(fi);
for i:=1 to n do Read(fi,a[i]);
min:=a[1];
ch:=1;
for i:=1 to n do if a[i]<min then 
begin
min:=a[i];
ch:=i;
end;
for i:=1 to n do 
if ch=i then continue
else 
kolvo:=kolvo+a[i]+min;
Write(fo,kolvo-min);
Close(fo);
end.

dimon_snake вне форума   Ответить с цитированием
Старый 06.01.2017, 03:08   #2
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Адрес: RF Moscow
Сообщений: 5,288
Репутация: 2407

icq: 438888048
По умолчанию

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

s := 0;
min := max_val; // заведомо большее число
for i := 1 to n do
begin
  Read(fi, a);
  s := s + a;
  if a < min then
    min := a;
end;
s := abs(s + (n - 3) * min);

__________________
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума   Ответить с цитированием
Старый 06.01.2017, 09:08   #3
AnryKZKZ
Форумчанин
 
Регистрация: 15.04.2014
Сообщений: 61
Репутация: 20
По умолчанию

Если я правильно понял, то кодом
Код:

 Read(fi,n);

вы из исходного файла считываете кол-во элементов в файле.
Не совсем понятно что вы считываете этим кодом
Код:

 Readln(fi);

По сути это ручной ввод. Хотя параметр "fi" вы привязали к файлу, где исходные данные.
Как написали ранее - параметр kolvo не инициализирован
И кто будет закрывать сессию с файлом с исходными данными?
Код:

 Close(fi);

AnryKZKZ вне форума   Ответить с цитированием
Старый 06.01.2017, 14:06   #4
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 157
Репутация: 75
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Во-первых, лучше инициализировать kolvo нулем.
Во-вторых, в чем выражается неработоспособность кода.
В-третьих, вот так примерно мне видится решение:
Код:

s := 0;
min := max_val; // заведомо большее число
for i := 1 to n do
begin
  Read(fi, a);
  s := s + a;
  if a < min then
    min := a;
end;
s := abs(s + (n - 3) * min);

Кол-во нулем инициализировал, не помогло.
В чем код нерабочий? Работает в 20% случаях - не работает в общем.
И ваш код тоже работает в 20% случаях.
dimon_snake вне форума   Ответить с цитированием
Старый 06.01.2017, 14:07   #5
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 157
Репутация: 75
По умолчанию

Цитата:
Сообщение от AnryKZKZ Посмотреть сообщение
вы из исходного файла считываете кол-во элементов в файле.
Не совсем понятно что вы считываете этим кодом
В первой строке у меня n, во второй - n чисел.
Дабы читать вторую строку, Readln(fi) просто переносит строку
dimon_snake вне форума   Ответить с цитированием
Старый 06.01.2017, 15:51   #6
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Адрес: RF Moscow
Сообщений: 5,288
Репутация: 2407

icq: 438888048
По умолчанию

А у Вас есть пример, на котором код неверно срабатывает, для которого известен верный ответ?
__________________
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума   Ответить с цитированием
Старый 06.01.2017, 18:39   #7
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 21,010
Репутация: 4764
По умолчанию

dimon_snake, а Вы время на возвращение учитывать не забываете?

Цитата:
Сообщение от dimon_snake Посмотреть сообщение
То есть, берем самого быстрого, и он всех водит с первого пункта во второй.
думаю, что ошибка в этом.
на форуме была аналогичная задача про переход через мост.

нужно наоборот, быстрых оправлять вместе, а отдельно оправлять вместе медленных, а вот зонт возвращать самым быстрым.
Понятное ведь, если вы самого быстрого отправите вместе с самым медленным, то перейдут он за время самого медленного!
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 07.01.2017, 00:01   #8
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 157
Репутация: 75
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
А у Вас есть пример, на котором код неверно срабатывает, для которого известен верный ответ?
Нет, неизвестен

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
dimon_snake, а Вы время на возвращение учитывать не забываете?


думаю, что ошибка в этом.
на форуме была аналогичная задача про переход через мост.

нужно наоборот, быстрых оправлять вместе, а отдельно оправлять вместе медленных, а вот зонт возвращать самым быстрым.
Понятное ведь, если вы самого быстрого отправите вместе с самым медленным, то перейдут он за время самого медленного!
Не забываю
Вот в этой строке
Код:

kolvo:=kolvo+a[i]+min;

где a[i] - очередной человек, которого перевел самый быстрый, а min - самый быстрый
То есть до общего времени добавляем очередного, а потом самого быстрого, т.к. он возвращается за следующим
dimon_snake вне форума   Ответить с цитированием
Старый 07.01.2017, 04:37   #9
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 21,010
Репутация: 4764
По умолчанию

dimon_snake
если нужно перейти 4-м человечкам.
первый переходит за 1 минуту
второй переходит за 2 минуты
третий переходит за 20 минут
четвёртый переходит за 20 минут

оптимальным будет, если сначала перейдут 1-й и 2-й (это 2 минуты),
потом первый вернётся ( это +1 минута),
потом перейдут вместе 3-й и 4-й (это + 20 минут)
потом вернётся 2-й (это +2 минуты)
и потом перейдут оставшиеся 1-й и 2-й (это +2 минуты).
итого 2+1+20+2+2 = 27 минут
а сколько минут выдаётся ваш код?
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 07.01.2017, 16:52   #10
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 157
Репутация: 75
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
dimon_snake
если нужно перейти 4-м человечкам.
первый переходит за 1 минуту
второй переходит за 2 минуты
третий переходит за 20 минут
четвёртый переходит за 20 минут

оптимальным будет, если сначала перейдут 1-й и 2-й (это 2 минуты),
потом первый вернётся ( это +1 минута),
потом перейдут вместе 3-й и 4-й (это + 20 минут)
потом вернётся 2-й (это +2 минуты)
и потом перейдут оставшиеся 1-й и 2-й (это +2 минуты).
итого 2+1+20+2+2 = 27 минут
а сколько минут выдаётся ваш код?
Да, действительно
Благодарю
dimon_snake вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано скорость лодки, скорость течения реки, время движения, определить путь S, пройденный лодкой (на Delphi) zhora-011 Помощь студентам 1 06.09.2013 22:05
Как создать детектор движения без dspack? ubun Мультимедиа в Delphi 0 03.01.2011 22:40
Скорость рисования и остальная скорость ZotaC Gamedev - cоздание и обсуждение игр 121 13.11.2010 23:51
Как улеличивать скорость движения во время движия Нур Помощь студентам 9 23.12.2009 14:00
Скорость движения обьекта shepelin Общие вопросы Delphi 9 23.01.2008 12:51




15:57.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
таргетированный трафик


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

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru