Задача Training Lab от First Steps in Coding - More Exercises
Добър вечер,
Някой може ли да ми обясни къде имам грашка/и в кода? В конзолата ми се получават посочените входове и изходи, но judge-ът ми дава 20/100.
using System;
namespace TrainingLab
{
class Program
{
static void Main(string[] args)
{
int hOfAPiece = 70;
int wOfAPiece = 120;
int hOfCorridor = 100;
double hOfRoom = double.Parse(Console.ReadLine());
double wOfRoom = double.Parse(Console.ReadLine());
double wRoomWithoutCorridor = (wOfRoom * 100) - hOfCorridor;
double wRoomPeices= Math.Round(wRoomWithoutCorridor / hOfAPiece);
double hRoomPeices = Math.Round((hOfRoom * 100) / wOfAPiece);
Console.WriteLine((wRoomPeices * hRoomPeices) -3);
}
}
}
Предварително много благодаря за помоща!
Условие:
Учебна зала има правоъгълен размер w на h метра, без колони във вътрешността си. Залата е разделена на две части – лява и дясна, с коридор приблизително по средата. В лявата и в дясната част има редици с бюра. В задната част на залата има голяма входна врата. В предната част на залата има катедра с подиум за преподавателя. Едно работно място заема 70 на 120 cm (маса с размер 70 на 40 cm + място за стол и преминаване с размер 70 на 80 cm). Коридорът е широк поне 100 cm. Изчислено е, че заради входната врата (която е с отвор 160 cm) се губи точно 1 работно място, а заради катедрата (която е с размер 160 на 120 cm) се губят точно 2 работни места. Напишете програма, която въвежда размери на учебната зала и изчислява броя работни места в нея при описаното разположение (вж. фигурата).
Вход
От конзолата се четат 2 числа, по едно на ред: w (дължина в метри) и h (широчина в метри).
Ограничения: 3 ≤ h ≤ w ≤ 100.
Изход
Да се отпечата на конзолата едно цяло число: броят места в учебната зала.
Примерен вход и изход
Вход
Изход
Чертеж
Обяснения
15
8.9
129
Залата е широка 890 cm. От тях 100 cm отиват за коридора в средата. В останалите 790 cm могат да се разположат по 11 бюра на ред (11 * 70 cm = 770 cm + 20 cm остатък).
Залата е дълга 1500 cm. В тях могат да бъдат разположени 12 реда (12 * 120 cm = 1440 + 60 cm остатък).
Брой места = 12 * 11 - 3 = 132 - 3 = 129 (имаме 12 реда по 11 места = 132 минус 3 места за катедра и входна врата).
8.4
5.2
39
Залата е широка 520 cm. От тях 100 cm отиват за коридора в средата. В останалите 420 cm могат да се разположат по 6 бюра на ред (6 * 70 cm = 420 cm, без остатък).
Залата е дълга 840 cm. В тях могат да бъдат разположени 7 реда (7 * 120 cm = 840, без остатък).
Брой места = 7 * 6 - 3 = 42 - 3 = 39 (имаме 7 реда по 6 места = 42 минус 3 места за катедра и входна врата).
Линк - https://judge.softuni.bg/Contests/Practice/Index/1642#4
Открих проблема - смених Math.Round() с Math.Floor() и ми даде 100/100, но защо? В условието на задачата не пише изрично, че трябва да се закръгли надолу.
Току-що и аз точно това установих и щях да ти го напиша, но ти вече сама си стигнала до правилното решение - браво! Обърни внимание, че в условието не е изрично посочено също и закръгляне до най-близкото цяло число (Math.Round), а просто "Да се отпечата на конзолата едно цяло число: броят места в учебната зала.". Когато използваш Math.Floor винаги закръгляш само до цяло число надолу (както и ти самата посочваш), като така премахваш остатъка след десетичната запетая, който в даден случай може да е и 0,999, но това пак не е достатъчно за 1 цяло работно място, а за 0,999 от него. А ако използваш Math.Round знаеш, че при такъв случай (или при всеки друг случай >= 0,5) ще закръглиш нагоре до единица и ще получиш още едно работно място, което обаче няма да е коректен резултат.
Мнооого благодаря за подробното и отлично обяснение!!! :))
Моля-моля, радвам се да помогна. Успех желая!