Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

SilviaSJ avatar SilviaSJ 3 Точки

Изпитна Задача Transport Price

Здравейте,

Имам проблем с тази задача, при проверка 180/night ми изкарва 10.7999, а не 10.80 и не мога да разбера къде греша.

Не съм сигурна, и че Math.round трябва да е там, но без него ми дава 7.0, вместо 7.

Съответно Judge ми дава 83/100.

https://pastebin.com/KcAQpY9b

Задача: цена за транспорт

Студент трябва да пропътува n километра. Той има избор измежду три вида транспорт:

  • Такси. Начална такса: 0.70 лв. Дневна тарифа: 0.79 лв./км. Нощна тарифа: 0.90 лв./км.
  • Автобус. Дневна / нощна тарифа: 0.09 лв./км. Може да се използва за разстояния минимум 20 км.
  • Влак. Дневна / нощна тарифа: 0.06 лв./км. Може да се използва за разстояния минимум 100 км.

Напишете програма, която въвежда броя километри n и период от деня (ден или нощ) и изчислява цената на най-евтиния транспорт.

Входни данни

От конзолата се четат два реда:

  • Първият ред съдържа числото n – брой километри – цяло число в интервала [1 … 5000].
  • Вторият ред съдържа дума "day" или "night" – пътуване през деня или през нощта.

Изходни данни

Да се отпечата на конзолата най-ниската цена за посочения брой километри.

 

Вход Изход Вход Изход
5
day
4.65 7
night
7
Вход Изход Вход Изход
25
day
2.25 180
night
10.8
Тагове:
0
Programming Basics
MartinBG avatar MartinBG 4803 Точки

Цената трябва да се изведе форматирана до вторият знак, след десетичната запетая.

 

Ето един от начините:

System.out.printf("%.2f%n", priceB);

 

Като съвет, избягвай да повтаряш код - имаш 4 команди за отпечатване на резултата, а може да е само една:

        double price = 0.0;

        if (km >= 20 && km < 100) {
            price = 0.09 * km;
        } else if (km >= 100) {
            price = 0.06 * km;
        } else if (timeOfDay.equals("day") && km < 20) {
            price = 0.70 + 0.79 * km;
        } else if (km < 20 && timeOfDay.equals("night")) {
            price = 0.70 + 0.90 * km;
        }

        System.out.printf("%.2f%n", price);

Предимството на горният запис е, че ако ни се наложи да форматираме по друг начин резултата - например да прибавим някакъв текст към цената или да я изведем закръглена към по-голямото цяло число, ще се наложи да променим само един ред, а не 4.

 

Когато имаш if-else if-else конструкции, опитай да ги подредиш така, че да са най-лесни за четене (т.е. с по-къси условия и ясно изразени разклонения).

Например горният код може да се напише и така (коментарите са за твое улеснение, в production са излишни):

        if (km >= 100) { // train
            price = 0.06 * km;
        } else if (km >= 20) { // km < 100 and km >= 20 -> bus
            price = 0.09 * km;
        } else { // km < 20  -> taxi
            if ("day".equals(timeOfDay)) {
                price = 0.70 + 0.79 * km;
            } else if ("night".equals(timeOfDay)) {
                price = 0.70 + 0.90 * km;
            }
        }

 

0
SilviaSJ avatar SilviaSJ 3 Точки

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

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.