Професионална програма
Loading...
numenorsky avatar numenorsky 3 Точки

Programming Basics Online Exam - 28 and 29 March 2020 - 05. Suitcases Load

Здравейте,

Бих желал да помоля за помощ във връзка със задачата посочена в заглавието на този пост.

Тва е кода, който написах, но получавам в judge 90/100:

 

trunk = float(input())
line = ''

counter = 0

while line != 'End':
    line = input()
    if line == 'End':
        print(f'Congratulations! All suitcases are loaded!\nStatistic: {counter} suitcases loaded.')
        break
    if float(line) > trunk:
        print(f'No more space!\nStatistic: {counter} suitcases loaded.')
        break
    trunk -= float(line)
    counter += 1
    if counter % 3 == 0 :
        trunk -= float(line) * 0.1
    if float(line) <= 0:
        counter -= 1

Ето и линк в pastebin:   https://pastebin.com/2FqNaBpy

Моля по-опитен колега ако е възможно да ми обясни къде допускам грешка и защо този код, за разлика от моя работи:
 

capacity = float(input())
command = input()
counter = 0
is_space = True
while command != "End":
    number = float(command)
    if capacity <= number:
        is_space = False
        break
    capacity -= number
    counter += 1
    if counter % 3 == 0:
        capacity -= number * 0.10
        if capacity < 0:
            is_space = False
            counter -= 1
            break

    command = input()

if not is_space:
    print("No more space!")

if is_space:
    print("Congratulations! All suitcases are loaded!")

print(f"Statistic: {counter} suitcases loaded.")

 


 

Тагове:
0
Programming Basics with Python 02/07/2020 22:16:16
MartinBG avatar MartinBG 3099 Точки

Проблемът е, че сте разделили товаренето на всеки 3-ти куфар на 2 части, а има проверка за препълване само преди първото товарене.

Да вземем за пример следние входни данни:

3 (обем на багажното)

1 (3 - 1 = 2 осаващ обем)

1 (2 - 1 = 1 оставащ обем)

1 ( 2 -1 = 0 оставащ обем, но понеже е 3-ти куфар има и допълниелно 0 - 1 * 0.1 = -0.1 оставащ обем, т.е. този куфар не може да бъде натоварен).

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

 

Във второто решение товаренето отново е разделено на 2 части, но проверката е след второто товарене и така се хваща случая с препълването от добавката за 3-ти куфар.

 

Решението може да се опрости (да има по-малко разклонения), ако теглото се изчисли преди самото товарене:

trunk = float(input())

counter = 0

while True:
    line = input()

    if line == 'End':
        print(f'Congratulations! All suitcases are loaded!\nStatistic: {counter} suitcases loaded.')
        break

    suitcase = float(line)
    if (counter + 1) % 3 == 0:
        suitcase *= 1.1

    if suitcase > trunk:
        print(f'No more space!\nStatistic: {counter} suitcases loaded.')
        break

    trunk -= suitcase
    counter += 1

 

0
02/07/2020 22:36:57
numenorsky avatar numenorsky 3 Точки

Много благодаря за бързия отговор и подробните разяснения :-)
Спокоен ден и хубав уикенд!

1