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 :
import java.util.Scanner; public class darts { public static void main(String[] args) { Scanner user_input = new Scanner(System.in); String namePlayer = user_input.nextLine(); int beginningPoints = 301; int countOk = 0; int countNot = 0; String input = user_input.nextLine(); while(!input.equals("Retire")){ int points = Integer.parseInt(user_input.nextLine()); if(input.equals("Single")){ if(points <= beginningPoints){ beginningPoints = beginningPoints - points; countOk++; }else{ countNot++; } }else if(input.equals("Double")){ points = points * 2; if(points <= beginningPoints) { beginningPoints = beginningPoints - points; countOk++; }else{ countNot++; } }else if(input.equals("Triple")){ points = points * 3; if(points <= beginningPoints) { beginningPoints = beginningPoints - points; countOk++; }else { countNot++; } } if(beginningPoints == 0){ System.out.printf("%s won the leg with %d shots.", namePlayer, countOk); break; } input = user_input.nextLine(); } if (input.equals("Retire")){ System.out.printf("%s retired after %d unsuccessful shots.", namePlayer, countNot); } } }Здравей,
като изключим няколкото дублирани проверки - кода ти би трябвало да си работи без проблем.
Поздрави :)