Профил
Loading...
+ Нов въпрос
MarioVl avatar MarioVl 2 Точки

Archery Tournament

Здравейте , някой може ли да ми помогне с решените дава ми 90/100 и не мога да разбера къде греша . Много благодаря

https://judge.softuni.bg/Contests/Practice/Index/1958#1

https://pastebin.com/8KsreLbc

 

 

 

Тагове:
0
Fundamentals Module
MartinBG avatar MartinBG 2679 Точки

Атакувате по два пъти таргета в случаите, когато оставащите му точки са между 6 и 9:

if (Integer.parseInt(field[startIndex]) >= 5) { // първа етака, ако е с 5 или повече точки
    field[startIndex] = String.valueOf(Integer.parseInt(field[startIndex]) - 5);
    point += 5;
}
if (Integer.parseInt(field[startIndex]) < 5) { // втора атака, ако е с по-малко от 5 останали точки след първата
    point += Integer.parseInt(field[startIndex]);
    field[startIndex] = "0";
}

 

Ето примерен тест, който демонстрира проблема:

7
Shoot Right@0@0
Game over



Връща:

0
Iskren finished the archery tournament with 7 points!


Вместо:
2
Iskren finished the archery tournament with 5 points!

 

Двете проверки трябва да са свърани в обща if-else if конструкция, за да се гарантира, че таргета ще бъде атакуван само веднъж:

if (Integer.parseInt(field[startIndex]) >= 5) {
    field[startIndex] = String.valueOf(Integer.parseInt(field[startIndex]) - 5);
    point += 5;
} else if (Integer.parseInt(field[startIndex]) < 5) {
    point += Integer.parseInt(field[startIndex]);
    field[startIndex] = "0";
}

 

 

EDIT:

Забелязах, че сте използвали оптимизации в кода, затова щв Ви предложа и две решения от мен, които може да са Ви интересни:

Вариант 1

Вариант 2 - по-функционално ориентиран

0
30/06/2020 03:50:11
MarioVl avatar MarioVl 2 Точки

Много благодаря . Аз така бях разбрал условието :) . Нямаше да си намеря грешката :) Благодаря . Ще разгледам и решенията където ми дадохте :)

1