Loading...
ioanna.konova avatar ioanna.konova 47 Точки

Задача Cinema Tickets от Nested Loops - Lab - 0/100 (Runtime errors) в judge

Добър  вечер /за пореден път/,

Някой може ли да ми помогне и да каже къде е грешката в кода ми? Примерните изходи ми излизат и не знам къде греша ...

Условие:

Примерна изпитна задача

7.*Билети за кино

Вашата задача е да напишете програма, която да изчислява процента на билетите за всеки тип от продадените билети: студентски(student), стандартен(standard) и детски(kid), за всички прожекции. Трябва да изчислите и колко процента от залата е запълнена за всяка една прожекция.

Вход

Входът е поредица от цели числа и текст:

  • На първия ред до получаване на командата "Finish" - име на филма – текст
  • На втори ред – свободните места в салона за всяка прожекция – цяло число [1 … 100]
  • За всеки филм, се чете по един ред до изчерпване на свободните места в залата или до получаване на командата "End":
    • Типа на закупения билет - текст ("student", "standard", "kid")

Изход

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

  • След всеки филм да се отпечата, колко процента от кино залата е пълна

"{името на филма} - {процент запълненост на залата}% full."

  • При получаване на командата "Finish" да се отпечатат четири реда:
    • "Total tickets: {общият брой закупени билети за всички филми}"
    • "{процент на студентските билети}% student tickets."
    • "{процент на стандартните билети}% standard tickets."
    • "{процент на детските билети}% kids tickets."

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

Вход

Изход

Обяснения

Taxi

10

standard

kid

student

student

standard

standard

End

Scary Movie

6

student

student

student

student

student

student

Finish

Taxi - 60.00% full.

Scary Movie - 100.00% full.

Total tickets: 12

66.67% student tickets.

25.00% standard tickets.

8.33% kids tickets.

Първи филм – Taxi, местата в залата са 10

Купуват се 3 стандарти, 2 студентски, 1 детски билет и получаваме командата End.

Общо 6 билета от 10 места -> 60% от залата е заета.

Втори филм – Scary Movie, места в залата са 6

Купуват се 6 студентски билета и местата в залата свършват.

Общо 6 билета от 6 места -> 100% от залата е заета.

Получаваме командата Finish

Общо закупените билети за всички филми са 12.

За всички филми са закупени общо:

8 студентски билета. 8 билета от общо 12 е 66.67%

3 стандартни билета. 3 билета от общо 12 е 25%

1 детски билет. 1 билет от общо 12 е 8.33%

Вход

Изход

Обяснения

The Matrix

20

student

standard

kid

kid

student

student

standard

student

End

The Green Mile

17

student

standard

standard

student

standard

student

End

Amadeus

3

standard

standard

standard

Finish

The Matrix - 40.00% full.

The Green Mile - 35.29% full.

Amadeus - 100.00% full.

Total tickets: 17

41.18% student tickets.

47.06% standard tickets.

11.76% kids tickets.

Първи филм – The Matrix, местата в залата са 20

Купуват се 2 стандартни, 4 студентски, 2 детски билета и получаваме командата End.

Общо 8 билета от 20 места -> 41.18% от залата е заета

Втори филм - The Green Mile, местата в залата са 17

Купуват се 3 стандартни, 3 студентски билета и получаваме командата End.

Общо 6 билета от 17 места -> 47.06% от залата е заета

Трети филм – Amadeus, местата в залата са 3

Купуват се 3 стандартни билета и местата в залата свършват.

Общо 3 билета от 3 места -> 100% от залата е заета.

Получаваме командата Finish

Общо закупените билети за всички филми са 17.

За всички филми са закупени общо:

7 студентски билета. 7 билета от общо 17 е 41.18%

8 стандартни билета. 8 билета от общо 17 е 47.06%

2 детски билета. 2 билета от общо 17 е 11.76%

Тагове:
0
Programming Basics
icowwww avatar icowwww 2813 Точки

Здравей,

Да допълня колегата:

Имаш грешка в броенето- прочиташ следващ билет преди да мине проверката дали има свободни места.

С две проверки нагаждаш грешното решение към нулевите тестове.

Поствам цялото с минимални промени и с коментари: https://pastebin.com/wDsx70Z9

Надявам се да сме ти били полезни

1
VasilKos avatar VasilKos 17 Точки

Здравейте, гледах от колеги и кодът го докарах до 100.   Cinema Tickets - Pastebin.com

Cinema Tickets - Pastebin.com

Въпросът ми е относно долния код: Мога ли да достъпя "movieType"  в While-a, без да съм го задал първона4ално да е празен стринг?

  1. String movieType = ""; //("student", "standard", "kid")

  2.             while (!movieType.equals("End") && currentMovieCount < freeSeats) {

  3.                 movieType = scanner.nextLine();

0
icowwww avatar icowwww 2813 Точки

Тук String movieType = ""; инстанцираш променливата. В условието на цикъла променливата вече се използва. Преди началото на изпълнението на кода в цикъла преди всяка итерация се проверява. Тоест не можеш да използваш нещо, което все още не съществува

0
30/09/2021 23:05:00
svephoto avatar svephoto 1191 Точки

Колега icowwww, имам въпрос: как while цикълът ще знае що е то movieType, ако тази променлива се дефинира вътре в него? Няма да може да провери частта от условието !movieType.equals("End").

0
30/09/2021 10:36:55
VasilKos avatar VasilKos 17 Точки

svephoto,

благодарение на въпроса ти, си отговорих. мерси

0
svephoto avatar svephoto 1191 Точки

yes Супер, радвам се, VasilKos laugh

0
icowwww avatar icowwww 2813 Точки

svephoto Много си прав, недогледал съм. Естествено няма как да се ползва в условието ако се инстанцира вътре в него.

Поправям коментара за да го прочете някой, без да прочете и следващите:

Wrong:

Тук String movieType = ""; инстанцираш променливата. Вътре в цикъла стойността се променя.

Може да бъде вкарано вътре в цикъла като я инстанцираш всеки път 

while (!movieType.equals("End") && currentMovieCount < freeSeats) {

String movieType = scanner.nextLine();

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

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