Всем привет.
Недавно решил освоить метод рекурсивного спуска, нашел задачу http://informatics.mccme.ru/mod/statements/view3.php?id=11575&chapterid=112500 , написал код который прошел 10 тестов из 21. Попытался сдать на питоне, опять таки 10 из 21. Хотел спросить, кто нибудь сдавал эту задачу? Если да подскажите, может там есть хитрость какая то, которую я не могу понять
Я думаю, ребятам хотелось бы увидеть твой код, ибо так будет проще понять, что в твоём коде не так
from math import *
s = input()
exec('print("%.3f" % (' + s + '))')
Что выдаст на 5/2 ?
UPD: Ок, на третьем питоне все ок, а на втором падает.
я не майстер в пітоні але як я зрозумів exec робить обчислення твоєї строки,просто проходили цю тему,це можна в гуглі вбити як "дерево выражений" і воно тобі видасть багато на цю тему,просто робиш 4 функції,які викликають одна в іншій,перша рахує (+,-) друга рахує (*,/) третя sin,cos,abs,sqrt,четверта має рахувати значення в дужках,формально ці 4 функції задають пріоритет операцій(коли будеш гуглити побачиш) а так це досить великий код,і досить кропітка робота,ну удачі і вибач за моє погане знання російської
"вибач за моє погане знання російської" — извини, не заметил эту строку:(
бува)
Я не знаю украинский но догадываюсь о чем ты говоришь) Я реализовал метод рекурсивного спуска так :
<Выражение> = <Слагаемое>{(+|-)<Слагаемое>}
<Слагаемое> = <Множитель>{(*|/)<Множитель>}
<Множитель> = (+|-) <ДробноеЧисло>|<Функция>|(<Выражение>)
<ДробноеЧисло> = <ЦелаяЧасть>|<ЦелаяЧасть>.<ДробнаяЧасть>
<ЦелаяЧасть> = <Цифра>|<Цифра><Цифра>
<ДробнаяЧасть> = <Цифра>|<Цифра><Цифра>
<Функция> = <ИмяФункции>(<Выражение>)
<ИмяФункции> = "sin"|"cos"
<Цифра> = 0|1|2|3|4|5|6|7|8|9
Видимо тут чего то нет, мне надо понять чего именно
<ЦелаяЧасть> = <Цифра>|<Цифра><Цифра>
Мб.
<ЦелаяЧасть> = <Цифра>|<Цифра><Целая часть> ?
<ИмяФункции> = "sin"|"cos" <- тут еще есть варианты
Эти пункты скопипастил не всматриваясь, ну а по факту sin cos abs sqrt реализовал и дробное число рассматривать вообще не надо, так как в той задаче гарантированы на вход целые числа
останній комент був про eval,я подумав що можливо це с++ функція,загуглив і чуда не відбулось,але натрапив на 2 статті в вікіпедії з детальним описом ,щоправда на англійській,в мене з нею проблем менше) https://en.wikipedia.org/wiki/Recursive_descent_parser http://en.wikipedia.org/wiki/Shunting-yard_algorithm
Зачем exec? Вот код, который заходит на втором питоне:
Спасибо, а вы знаете чем отличается мой код от того который заходит у вас? Мне надо переделать свой сишный код который работает как тот что на питоне
Хм, а вообще-то во втором питоне деление целочисленное ведь, так что не знаю, почему такой код прошёл xD
Ведь там требование "Результат операции деления – вещественное число".
Для вычисления значения выражения предназначен eval: