Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 5, 2020 05:58:29

Trancecore
Зарегистрирован: 2020-12-04
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите найти ошибку.

Добрый день. Только начал изучать питон, и вот на одной из задач попал в тупик.
Сложность детская, но я в начале пути.

Вася делает ремонт в комнате размером A на B метров и хочет положить на пол линолеум. Линолеум продается в рулонах шириной 1 метр и длиной D метров. Какое минимальное количество рулонов необходимо купить Васе, чтобы линолеума хватило на покрытие всей площади комнаты?

Целые числа A, B и D задаются по одному в строке

Sample Input:

3
4
5
Sample Output:

3


Я решил это так :

A = int(input())
B = int(input())
D = int(input())
C = 1
s = A * B // Узнаем площадь комнаты
f = C * D // Узнаем размер рулонов
print(s // (f - 1)) // А тут уже делим площадь, на рулоны и используем -1 как округление в большую сторону.

Ответ выдается верный, а программа проверки говорит : Failed test #2 of 8. Wrong answer

Не могу понять где я ошибаюсь или где можно оптимизировать.

Офлайн

#2 Дек. 5, 2020 08:06:39

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Помогите найти ошибку.

Я думаю что проблема в том что ваш подход - купить N рулонов. Расплавить их и заливать расплавом пол, не соответствует представлениям авторов задачи о технологии укладки линолиума. Он там не влезает то по ширине то по длине, обрезки всякие…

Округление делается функциями floor ceil.



Отредактировано doza_and (Дек. 5, 2020 08:09:23)

Офлайн

#3 Дек. 5, 2020 11:52:08

@cckyi_boxxx
От:
Зарегистрирован: 2012-01-13
Сообщения: 181
Репутация: +  14  -
Профиль   Отправить e-mail  

Помогите найти ошибку.

 print(s // (f - 1)) # А тут уже делим площадь, на рулоны и используем -1 как округление в большую сторону

Непонятно как это должно округлять в большую сторону, тут подойдет либо проверка на остаток от деления либо функции округление из модуля math.

И лучше сразу избегать непонятных интуитивно имен переменных, на такой мелочи сложности не будет но на чуть более сложном проекте сами-же запутаетесь.

код на форумы выкладывайте под теги что-бы было видно форматиролвание
[code python]#здесь код[/code]

ну и вот варианты решения:
  
import math
print("введите ширину комнаты:")
room_width = int(input())
print("введите длину комнаты:")
room_length = int(input())
print("введите длину рулона линолеума:")
linoleum_length = int(input())
room_s = room_width * room_length
# так как ширина рулона равна 1 метру ее можно не учитывать в рассчетах
if room_s % linoleum_length:
    lin_num = room_s // linoleum_length + 1
else:
    lin_num = room_s / linoleum_length
print('необходимо %i рулонов' % lin_num, '(вычислено if-ами)')
print('необходимо %i рулонов' % math.ceil(room_s / linoleum_length), '(вычислено math.ceil())')



Офлайн

#4 Дек. 5, 2020 14:09:24

Trancecore
Зарегистрирован: 2020-12-04
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите найти ошибку.

@cckyi_boxxx
Забыл уточнить. что это самое начало обучения, курс от ВШЭ.
И кроме самых простых функций еще ничего не используем, только стандартный набор +-, //,/, *, %
Вот при помощи всего этого надо решить данную задачу.

Офлайн

#5 Дек. 5, 2020 14:10:20

Trancecore
Зарегистрирован: 2020-12-04
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите найти ошибку.

@cckyi_boxxx
тут подойдет либо проверка на остаток от деления
Видимо вот тут я и упустил что то.

Офлайн

#6 Дек. 5, 2020 15:22:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9729
Репутация: +  843  -
Профиль   Отправить e-mail  

Помогите найти ошибку.

  
>>> def f(a, b, d):
...     s = a * b
...     return s // d + (s % d != 0)
... 
>>> f(2, 2, 3)
2
>>> f(2, 2, 4)
1
>>>



Офлайн

#7 Дек. 7, 2020 07:51:41

Trancecore
Зарегистрирован: 2020-12-04
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите найти ошибку.

py.user.next
Спасибо, в итоге вот так все отлично сработало.
И я понял свою проблему, и как это все посчиталось.
 A = int(input())
B = int(input())
D = int(input())
s = A * B
print(s // D + (s % D != 0))

Офлайн

#8 Янв. 3, 2021 14:38:23

simonovaleksandr
Зарегистрирован: 2020-08-17
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите найти ошибку.

Здравствуйте, я хотел сделать программу по изменению места положения точки одной линии
при нажатии на клавишу “PgUp”,но при нажатии ничего не происходит , помогите пожалуйста
решить эту проблему. Вот код программки:
from tkinter import *
root=Tk()
root.minsize(width=300,height=300)
root.resizable(0,0)
c=Canvas(root,width=300,height=300 )
c.pack()
def Right(event):
if event.keysym=='Up':
y=100
y=y+1
print(“нажата клавиша”)
c.create_line(100,100,200,y)
c.bind_all('KeyPress-Up',Right)
root.mainloop()

Офлайн

#9 Янв. 3, 2021 16:22:26

rami
Зарегистрирован: 2018-01-08
Сообщения: 280
Репутация: +  71  -
Профиль   Отправить e-mail  

Помогите найти ошибку.

Пропущены угловые скобки:

 c.bind_all('<KeyPress-Up>', Right)

Офлайн

#10 Янв. 3, 2021 18:34:37

simonovaleksandr
Зарегистрирован: 2020-08-17
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите найти ошибку.

Я исправил ошибку, но при работе программы правая точка линии
опускается только на 1 пиксель ,и дальше не опускается.
Помогите пожалуйста эту проблему решить.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version