sresort, В случае, если вы прочитали 1, то вы должны создать вершину и вернуть ее. Не заполнять у какой-то вершины левого ребенка рекурсивно, а просто вернуть.
Ну и еще, ваша функция не должна принимать никаких node. Что оно означает вообще? Функция просто возвращает корень поддерева. Вы же при вызове присваиваете уже node->left тому что функция вернула. Зачем туда еще что-то передавать.
под наилучшим имею ввиду результат с наименьшим отклонением от цели,
Ну вот, допустим надо набрать (10%, 20%, 30%). Есть варианты набрать (12%, 18%, 32%) или (11%, 19%, 35%). Какой лучше и почему?
Ответ многомерный, там порядка нет, поэтму слова " наименьшие отклонение" не имеют смысла. Вот если вы добавите какую-то метрику. то станет однозначно. Можно, например, сумму квадратов отклонений считать. Или максимальное отклонение. Или количество идеальных совпадений.
наилучшим (допускается приближенное решение) образом
Что значит "наилучшим образом"? Может можнго подобрать все кроме одного ингредиента идеально, а остальной вообще не так. Или можно все чуть-чуть с откланениями набрать. Какой вариант лучше и почему?
Если есть точное решение, то это будет решением простой системы линейных уравнений : представьте, что вы берете x_i i-ого товара по весу. Тогда составьте уравнения - ингредиента ото всех товаров по весу столько же, соклько должно быть в общем весе всех взятых товаров. Плюс еще уравнение, что сумма всех весов равна 1, потому что любое решение можно отмасштабировать, просто взяв всех товаров чуть меньше или больше.
Ну и там еще нужны условия, что все переменные неотрицательны.
Если точного решения нет, то там какая-то задача оптимизации. Какая именно, и как ее решать - зависит от того, что вы считаете "наилучшим" образом.
Jeff_Parker, Сергей Сергей, Так-то можно оценить минимальное количество кликов, нужное для этого. Но на самом деле количество кликов может быть сколь угодно большое. Нужна вам такая оценка? Там будет муторно и много математики. Лень расписывать, если не надо.
Сергей Сергей, Если данные округлены - то вы никак не можете знать уже. Если данные просто выводятся округленные, а в таблице есть более точное значение, ну так домножте все числа на 10^7 и возьмите знаменатели 10^9. Но если они действительно округлены, то вы уже никак знать не можете. Может там 1e-7 прибавляется - и тогда внезапно знаменатель никак не сократить и НОК будет все 10^9.
marshmallow, Alexandroppolus,
Динамическое программирование позволило бы быстрее подсчитать сколько таких множеств есть или проверить, а есть ли они вообще. Раз в задаче надо их сами вывести, то задача решается только полным перебором. С помощью ДП его можно ускорить, но не во всех случаях, поэтому заморачиваться смысла нет.
Сумма внешних углов может быть больше 360. У квадрата там 1080
Вот те углы между векторми сторон, которые в сумме дают 360, вот они у такого угла в 0 градусов будут 180. Еще досаточно остается для второго такого же угла.
Проблема тут не в углах, ведь вполне можно представить себе 2-угольник из двух совпадающих сторон, а в определении. Просто тупо накладывающиеся друг на друга стороны противоречат определению многоугольника. Потому что это бесполезная конструкция. Внутренности у нее нет, только граница.
soja, ну раз на стурктуру преподаватель не ругался, то вроде правильно. Хотя правила и требования у каждого преподавателя свои. Может вашему надо, чтобы стрелочки везде были. Или цвета надо особые делать у разных типов блоков.
Ну и еще, ваша функция не должна принимать никаких node. Что оно означает вообще? Функция просто возвращает корень поддерева. Вы же при вызове присваиваете уже node->left тому что функция вернула. Зачем туда еще что-то передавать.