Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2016, 15:32   #1
Mad_Lord
Пользователь
 
Регистрация: 23.01.2016
Сообщений: 14
По умолчанию Задача "выбор зала"

Для проведения церемонии открытия олимпиады по информатике организаторы
осуществляют поиск подходящего зала. Зал должен иметь форму прямоугольника, длина
каждой из сторон которого является целым положительным числом.
Чтобы все участники церемонии поместились в зале, и при этом он не выглядел
слишком пустым, площадь зала должна находиться в пределах от A до B квадратных метров,
включительно.
Чтобы разместить на стенах зала плакаты, рассказывающие об успехах школьников на
олимпиадах, но при этом не создать ощущения, что успехов слишком мало, периметр зала
должен находиться в пределах от C до D метров, включительно.
Прежде чем сделать окончательный выбор, организаторы олимпиады решили
просмотреть по одному залу каждого подходящего размера. Залы с размерами Y * Z и Z * Y
считаются одинаковыми. Чтобы понять необходимый объем работ по просмотру залов
организаторы задались вопросом, сколько различных залов удовлетворяют приведенным
выше ограничениям.
Требуется написать программу, которая по заданным A, B, C и D определяет
количество различных залов, площадь которых находится в пределах от A до B, а
периметр — от C до D, включительно.
Формат входного файла
Входной файл содержит четыре разделенных пробелами целых числа: A, B, C и D
(1 ≤ A ≤ B ≤ 109
, 4 ≤ C ≤ D ≤ 109 ).
Формат выходного файла
Выходной файл должен содержать одно число — искомое количество залов.
Пример входных и выходных файлов
hall.in
2 10 4 8

hall.out
3
Пояснения к примеру
В примере ограничениям удовлетворяют залы следующих размеров: 1 * 2, 1 * 3, 2 * 2



//Я написал вот такое решение, но компилятор находит ошибку. Пожалуйста, помогите понять, что не так.
Код:
Program HAll;
Var A, B, C, D, i, KolVo, K:integer;
     F:text;
Begin
Assign(f, 'hall.in.txt');
Reset (f);
Readln (f, A, B, C , D);
KolVo:=0;
For i:=A to B do 
  For K:=1 to i do If ((i mod K)= 0) and (i div K=>k) and  ((((i div k)+k)*2)=>C) And ((((i div k)+k)*2)<=D) then inc (colvo);
Writeln (kolvo);
End.

Последний раз редактировалось Вадим Мошев; 24.01.2016 в 13:58.
Mad_Lord вне форума Ответить с цитированием
Старый 23.01.2016, 15:53   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Заходи - тихо.
Говори - мало.
Уходи - быстро.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 23.01.2016, 16:17   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
  k:=0;
  for x:=1 to b do
    for y:=x to b do begin
      s:=x*y;
      p:=2*(x+y);
      if (s>=a) and (s<=b) and (p>=c) and (p<=d) then Inc(k);
    end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.01.2016, 17:55   #4
Mad_Lord
Пользователь
 
Регистрация: 23.01.2016
Сообщений: 14
По умолчанию

Это решение не подходит т.к. в условии сказано, что 2*1 и 2*1 одинаковые комнаты, а в Вашем решении одинаковые комнаты считаются по нескольку раз. Именно из-за этого Я ставил условие i div K=>k (второе число больше либо равно чем первому). Если кто знает, можете назвать причину ошибки в строке
For K:=1 to i do If ((i mod K)= 0) and (i div K=>k) and ((((i div k)+k)*2)=>C) And ((((i div k)+k)*2)<=D) then inc (colvo);
Ошибка вроде бы как "Нельзя преобразовать тип KeyValuePair<integer,integer> к boolean"
Кто может перефразировать эту строчку без изменения смысла алгоритма?
Mad_Lord вне форума Ответить с цитированием
Старый 23.01.2016, 18:02   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
в Вашем решении одинаковые комнаты считаются по нескольку раз
Точно? for y:=x по идее не должно этого допустить. Коль было 1,2 то 2,1 точно уже не будет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.01.2016, 18:08   #6
Mad_Lord
Пользователь
 
Регистрация: 23.01.2016
Сообщений: 14
По умолчанию

Извиняюсь, затупил чего-то, спасибо огромное за помощь)
Mad_Lord вне форума Ответить с цитированием
Старый 23.01.2016, 19:59   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Чот мысли вслух...

158.png
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04