Loading...

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

TatyanaSt avatar TatyanaSt 0 Точки

Малко помощ за изпитна задача!

Здравейте, може ли някой да ми помогне със задача

03. World Snooker Championship от изпита на 9/10 март 2019

Изпит по "Основи на програмирането" - 9 и 10 Март 2019

Задача 3. Билети за снукър

С наближаването на световното първенство по снукър в театъра Крусибъл в Шефилд, Англия, феновете нямат търпение да се сдобият с ценните билети. Заради големия наплив от хора, организаторите ви молят да напишете програма за продаване на билети, като се има предвид следния ценоразпис:

 

Четвъртфинал

Полуфинал

Финал

Стандартен

55.50 £/бр.

75.88 £/бр.

110.10 £/бр.

Премиум

105.20 £/бр.

125.22 £/бр.

160.66 £/бр.

ВИП

118.90 £/бр.

300.40 £/бр.

400 £/бр.

При закупуване на билет, зрителят може да избере опция, снимка с трофея, на цена 40 лири.

При достигане на определена сума има отстъпки:

  • Над 4000 лири има 25% отстъпка и безплатни снимки с трофея (ако опцията за снимки е избрана, таксата от 40 лири за билет не се включва)

  • Над 2500 лири има 10% отстъпка

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

Вход

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

  1. Етап на първенството – текст - “Quarter final ”, “Semi final” или “Final

  2. Вид на билета – текст - “Standard”, “Premium” или “VIP

  3. Брой билети – цяло число в интервала [1 … 30]

  4. Снимка с трофея – символ – 'Y' (да) или 'N' (не)

Изход

На конзолата се отпечатва 1 ред:

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

Примерен вход и изход


 

Вход

Изход

Обяснения

Final

Premium

25

Y

3012.38

Цената за един премиум билет за финал е 160.66 лири.

Цената за 25 билета е: 160.66 * 25 = 4016.5 лири

4016.5 > 4000, следователно зрителят получава безплатни снимки с трофея и 25% отстъпка от цената.

25% от 4016.5 е 3012.375.

Зрителят е избрал опцията за снимка с трофея, но тъй като вече е получил безплатни снимки, към цената не добавяме допълнителна такса.

Semi final

VIP

9

Y

2793.24

Цената за един ВИП билет за полуфинал е 300.40 лири.

Цената за 9 билета е: 300.40 * 9 = 2703.60 лири

2703.60 <= 4000, следователно не получава 25% отстъпка и безплатни снимки.

2703.60 > 2500, следователно зрителя получава 10% отстъпка от цената.

10% от 2703.60 е 2433.24,

Зрителя е избрал опция за снимка с трофея.

9 билета по 40 лири за снимка: 360 лири.

2433.24 + 360 = 2793.24

Quarter final

Standard

11

N

610.50

 


 

Това е моето решение:

https://pastebin.com/ryS9daPZ
Примерните вход/изход - и са ми верни, но Judge - а ми дава 50/ 100.

Къде бъркам?

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

Тагове:
0
Programming Basics with Java
knoteva avatar knoteva 1081 Точки

Здравей,

Проверките ти накрая не са ок. Ето вариант как могат да бъдат:

double totalSum = ticketNum * ticketPrice;

        if (totalSum > 4000)
        {
            totalSum *= 0.75;
        }
        else if (totalSum > 2500)
        {
             totalSum *= 0.90;
        }
        if (totalSum < 4000 && symbol.equals("Y"))    
        {
            totalSum += ticketNum * 40;
        }
       System.out.printf("%.2f", totalSum);

0
TatyanaSt avatar TatyanaSt 0 Точки

Благодаря, така гърми първият тест, но Judge дава 100/100.

0
18/03/2019 17:28:21
knoteva avatar knoteva 1081 Точки

Да, след отстъпката тотал цената става по-малка от 4000 и влиза в последния иф. Така минават всички тестове:

double totalPrice = ticketPrice * ticketCount;
            if (totalPrice > 4000)
            {
                totalPrice *= 0.75;
            }
            else if (totalPrice > 2500)
            {
                totalPrice *= 0.90;
                if (picture == "Y")
                {
                    totalPrice += ticketCount * 40;
                }
            }
            else if (picture == "Y")
            {
                    totalPrice += ticketCount * 40;
            }

0
19/03/2019 13:52:45
chrisi2712 avatar chrisi2712 272 Точки

Ето и друг вариант за проверките

 

bool isPhotoFree = false;

            if(totalSum>2500 && totalSum<=4000)
            {
                totalSum -= totalSum * 0.1;
            }
            else if (totalSum>4000)
            {
                totalSum -= totalSum * 0.25;
                isPhotoFree = true;
            }

            bool isPhoto = photoWithPrize == 'Y';
            if(isPhoto && isPhotoFree==false)
            {
                totalSum += 40 * ticketsCount;
            }

            Console.WriteLine($"{totalSum:F2}");

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