Професионална програма
Loading...
mariyan.nonchev avatar mariyan.nonchev 10 Точки

Training Lab задача

Учебна зала има правоъгълен размер w на h метра, без колони във вътрешността си. Залата е разделена на две части – лява и дясна, с коридор приблизително по средата. В лявата и в дясната част има редици с бюра. В задната част на залата има голяма входна врата. В предната част на залата има катедра с подиум за преподавателя. Едно работно място заема 70 на 120 cm (маса с размер 70 на 40 cm + място за стол и преминаване с размер 70 на 80 cm). Коридорът е широк поне 100 cm. Изчислено е, че заради входната врата (която е с отвор 160 cm) се губи точно 1 работно място, а заради катедрата (която е с размер 160 на 120 cm) се губят точно 2 работни места. Напишете програма, която въвежда размери на учебната зала и изчислява броя работни места в нея при описаното разположение (вж. фигурата).

Вход

От конзолата се четат 2 числа, по едно на ред: h (дължина в метри) и w (широчина в метри).

Ограничения: 3 ≤ h ≤ w ≤ 100.

 

Защо 1вото решение не работи, а само 2-рото? Трябва ли винаги, когато не е казано какви са числата, да избираме double, a не int?

static void Main(string[] args)
        {
            var h = double.Parse(Console.ReadLine());
            var w = double.Parse(Console.ReadLine());
            var hCm = h * 100;
            var wCm = h * 100 - 100;
            var area = hCm * wCm;
            var desks = (area / (70 * 120)) - 3;
            Console.WriteLine(Math.Floor(desks));
        }

static void Main(string[] args)
        {
            var h = double.Parse(Console.ReadLine());
            var w = double.Parse(Console.ReadLine());
            var hCm = h * 100;
            var wCm = w * 100 - 100;
            var checkH = hCm / 120; 
            var checkH2 = Math.Floor(checkH);
            var checkW = wCm / 70;  
            var checkW2 = Math.Floor(checkW);
            var totalDesks = checkH2 * checkW2 - 3;
            Console.WriteLine(totalDesks);
        }

 

Благодаря предварително.

Тагове:
0
Programming Basics 11/08/2016 12:47:52
AntyfrizZz avatar AntyfrizZz 238 Точки

Здравей,

 

Не съм сигурен дали разбрах точно за какво става въпрос, но видях една грешка в 1вия ти код. var wCm = h * 100 - 100; Това h не трябва ли да е w?

 

Поздрави!

0
mariyan.nonchev avatar mariyan.nonchev 10 Точки

Доста си прав, много тъпа грешка от моя страна, тъй като някои неща не ги копирах. За съжаление пак не работи както трябва..

 

При Вход 

15

8.9 

трябва да се получи 129

0
11/08/2016 12:54:53
AntyfrizZz avatar AntyfrizZz 238 Точки

Здравей,

 

Вторият подход към задачата е различен от 1вия. При втория, проверяваш на дължина колко бюра биха се събрали и закръгляш. След това проверяваш на ширина колко ще се съберат и закръгляш. След това изчисляваш колко събира стаята и вадиш 3.

Първият подход прави маалко по - различно нещо. намираш лицето на цялата стая (без коридора) и го делиш на лицето на работно място и чак тогава закръгляш.

Представи си стая с ширина 90 100 90 (2 реда по 90 и коридор между тях) и височина 1000 (10 колони с работни места). Отговорът на решението е 2 * 10 - 3 = 17 работни места. 2рият подход ще вземе ширината 180, ще я раздели на 70 и ще плучи 2. Ще вземе височината 1000, ще я раздели на 100 и ще получи 10. 2 * 10 - 3 = 17.

Реално в стаята остават по 20см от двата края (90 - 70 = 20). 20 * 1000 * 2 = 40000. Първият подход ще опита да слижи работни места в тази област, докато 2рия подход ще я игнорира.

За задачата не е нужно да използваш double. С int ще си спестиш и закръглянето.

 

EDIT: Не знам как са написани тестовете, но аз не бих вадил директно 3 от общия брой работни места. Може би трябва да се вземе предвид  и това, но става малко по - сложно.

 

Поздрави!

2
11/08/2016 13:11:04
mariyan.nonchev avatar mariyan.nonchev 10 Точки

Много ти благодаря!

0