04. Darts Задача 4. Дартс Programming Basics Java
Здравейте колеги,
Някой може ли да ми помогне с тази задача?
https://judge.softuni.bg/Contests/Practice/Index/1538#7
https://softuni.bg/downloads/svn/programming-basics-v4/course-directories/may-2019/2019-01/Exam/04.%20Darts.pdf
Дава ми 70/100....
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String command = scanner.nextLine(); String name = ""; double score = 301; double successfulShots = 0; double unsuccessfulShots = 0; while (!(command.equalsIgnoreCase("Retire"))) { name = command; String type = scanner.nextLine(); int points = Integer.parseInt(scanner.nextLine()); if (type.equalsIgnoreCase("Single")) { score -= points; if (score >= 0) { successfulShots++; } else { unsuccessfulShots++; score += points; } } else if (type.equalsIgnoreCase("Double")) { score -= points * 2; if (score >= 0) { successfulShots++; } else { unsuccessfulShots++; score += points * 2; } } else if (type.equalsIgnoreCase("Triple")) { score -= points * 3; if (score >= 0) { successfulShots++; } else { unsuccessfulShots++; score += points * 3; } } if (score == 0) { System.out.printf("%s won the leg with %.0f shots.", name, successfulShots); break; } name = command; } if ((command.equalsIgnoreCase("Retire"))) { System.out.printf("%s retired after %.0f unsuccessful shots.",name,unsuccessfulShots); } } }
Изпит по "Основи на програмирането" – 9 и 10 Март 2019
Задача 4. Дартс
Вашата задача е да напишете програма, която да изчислява, дали даден играч е успял да спечели лег. (Лег се нарича единична игра на дартс)
Първоначално играчът започва с 301 точки. Играчът хвърля стрелата върху таблото, като за всяко улучено поле, той получава определен брой точки. Всяко поле има по три сектора: единичен (Single) сектор от който се взимат броят точки от полето. Двоен (Double), от него се взимат удвоените точки от полето и троен (Triple) сектор, точките от който са умножени по 3.
Получените точки от всеки изстрел се изваждат от началните точки, до достигане на 0.
Забележка: При изстрел, даващ повече точки от наличните, той се зачита за неуспешен и играчът трябва да хвърля отново, докато не уцели точки равни на оставащите или по-малки, такъв удар се счита за успешен.
Пример: При налични точки 100, удар даващ повече от 100 точки, неуспешен
При налични точки 100, удар даващ по-малко или равни на 100 точки, успешен
Вход
Първоначално се чете един ред:
- Името на играча - текст
След това до получаване на команда "Retire" се четат многократно по два реда:
- Поле – текст ("Single", "Double" или "Triple")
- Точки – цяло число в интервала [0… 100]
Изход
Играта приключва при въвеждане на команда "Retire" или при изравняване на началните 301 точки към 0. На конзолата трябва да се напечата един ред:
- Ако играчът е спечелил лега:
- "{името на играча} won the leg with {успешните изстрели} shots."
- Ако играчът се е отказал от играта:
- "{името на играча} retired after {неуспешни изстрели} unsuccessful shots."
Примерен вход и изход
Вход |
Изход |
Обяснения |
Michael van Gerwen Triple 20 Triple 19 Double 10 Single 3 Single 1 Triple 20 Triple 20 Double 20 |
Michael van Gerwen won the leg with 8 shots. |
Започваме със 301 точки Първият удар е тройно 20 -> 60 <= 301 301 – 60 = 241; успешни изстрели = 1 Втори удар е тройно 19 -> 57 <= 241 241 – 57 = 184; успешни изстрели = 2 Трети удар е двойно 10 -> 20 <=184 184 – 20 = 164; успешни изстрели = 3 Четвърти удар е единично 3 -> 3 <= 164 164 – 3 = 161; успешни изстрели = 4 Пети удар е единично 1 -> 1 <= 161 161 – 1 = 160; успешни изстрели = 5 Шести удар е тройно 20 -> 60 <= 160 160 – 60 = 100; успешни изстрели = 6 Седми удар е тройно 20 -> 60 <= 100 100 – 60 = 40; успешни изстрели = 7 Осми удар е двойно 20 -> 40 <=40 40 – 40 = 0; успешни изстрели = 8 |
Stephen Bunting Triple 20 Triple 20 Triple 20 Triple 20 Triple 20 Triple 20 Double 7 Single 12 Double 1 Single 1 |
Stephen Bunting won the leg with 6 shots. |
Започваме със 301 точки Първият удар е тройно 20 -> 60 <= 301 301 – 60 = 241; успешни изстрели = 1 . . . Петият удар е тройно 20 -> 60 <= 61 61 – 60 = 1; успешни изстрели = 5 Шестият удар е тройно 20 -> 60 > 1 Неуспешни изстрели = 1 Седмият удар е двойно 7 -> 14 > 1 Неуспешни изстрели = 2 Осмият удар е единично 12 -> 12 > 1 Неуспешни изстрели = 3 Деветият удар е двойно 1 -> 2 > 1 Неуспешни изстрели = 4 Десетият удар е единично 1 -> 1 <= 1 1 – 1 = 0; успешни изстрели = 6 |
Rob Cross Triple 20 Triple 20 Triple 20 Triple 20 Double 20 Triple 20 Double 5 Triple 10 Double 6 Retire |
Rob Cross retired after 3 unsuccessful shots. |
Започваме със 301 точки Първият удар е тройно 20 -> 60 <= 301 301 – 60 = 241; успешни изстрели = 1 … Пети удар е двойно 20 -> 40 <= 61 61 – 40 = 21; успешни изстрели = 5 Шести удар е тройно 20 -> 60 > 21 Неуспешни изстрели 1 Седми удар е двойно 5 -> 10 <= 21 21 – 10 = 11; успешни изстрели 6 Осми удар е тройно 10 -> 30 > 11 Неуспешни изстрели 2 Девети удар е двойно 6 -> 12 > 11 Неуспешни изстрели 3 Retire -> играча се отказва, след 3 неуспешни изстрела
|
Здравейте,
И аз имам проблем с тази задача, когато прочете "Retire", ми изпринтва изречението, но , когато няма "Retire", не печата нищо ... Пуснах дебъгера няколко пъти, спира да работи на последния въведен input :
Здравей,
като изключим няколкото дублирани проверки - кода ти би трябвало да си работи без проблем.
Поздрави :)